由于参数过多,Perl 命令未执行,我该如何修复它以允许更多参数?
Perl command not executing because of too many arguments, how can I fix it to allow more arguments?
我正在尝试使用这个命令:
perl -i -p -e "s/\r//" ./{folderName}/*.txt
问题是我在这个文件夹中有很多 .txt 文件,我想命令无法处理它...还有什么我可以尝试或做的事情来解决这个问题吗?
我得到的错误是:"Argument list too long"
我已成功使用此命令处理较小的文件夹大小(较少的 .txt 文件)并且工作正常。
GNU:
find {folder_name} -maxdepth 1 -name '*.txt' -exec perl -i -pe's/\r//' {} +
更便携:
find {folder_name} -maxdepth 1 -name '*.txt' -print | xargs perl -i -pe's/\r//'
echo {folder_name}/*.txt | xargs perl -i -pe's/\r//'
find {folder_name} -maxdepth 1 -name '*.txt' -exec perl -i -pe's/\r//' {} \;
备注
None 的解决方案支持以 -
.
开头的 {folder_name}
前两个便携式解决方案不支持其中包含某些特殊字符的文件名。 (但您不太可能首先在文件名中找到这些字符。)
GNU 解决方案和前两个可移植解决方案将尽可能多的文件名传递给 perl
(尽量减少 perl
启动的次数),而第三个便携式解决方案为每个参数启动一个 perl
进程。
echo
是一个 shell 内置函数,因此它不受系统对传递给实用程序的参数数量的限制。
shell 上的输入参数有限制。
这可以通过命令下面的 运行 找到。
getconf ARG_MAX
如果参数数量更多,那么您可以使用其他方法,如管道或 for 循环。
例如
for txt in ./{folderName}/*.txt ; do perl -i -p -e "s/\r//" "$txt"; done
或使用管道
echo ./{folderName}/*.txt | xargs perl -i -p -e "s/\r//"
echo 的解释,@ikegami 提出为什么 echo 不会给出 "too many argument"
原因是 echo 是内置命令,不会将参数传递给新进程。
我正在尝试使用这个命令:
perl -i -p -e "s/\r//" ./{folderName}/*.txt
问题是我在这个文件夹中有很多 .txt 文件,我想命令无法处理它...还有什么我可以尝试或做的事情来解决这个问题吗?
我得到的错误是:"Argument list too long"
我已成功使用此命令处理较小的文件夹大小(较少的 .txt 文件)并且工作正常。
GNU:
find {folder_name} -maxdepth 1 -name '*.txt' -exec perl -i -pe's/\r//' {} +
更便携:
find {folder_name} -maxdepth 1 -name '*.txt' -print | xargs perl -i -pe's/\r//'
echo {folder_name}/*.txt | xargs perl -i -pe's/\r//'
find {folder_name} -maxdepth 1 -name '*.txt' -exec perl -i -pe's/\r//' {} \;
备注
None 的解决方案支持以
-
. 开头的 前两个便携式解决方案不支持其中包含某些特殊字符的文件名。 (但您不太可能首先在文件名中找到这些字符。)
GNU 解决方案和前两个可移植解决方案将尽可能多的文件名传递给
perl
(尽量减少perl
启动的次数),而第三个便携式解决方案为每个参数启动一个perl
进程。echo
是一个 shell 内置函数,因此它不受系统对传递给实用程序的参数数量的限制。
{folder_name}
shell 上的输入参数有限制。 这可以通过命令下面的 运行 找到。
getconf ARG_MAX
如果参数数量更多,那么您可以使用其他方法,如管道或 for 循环。
例如
for txt in ./{folderName}/*.txt ; do perl -i -p -e "s/\r//" "$txt"; done
或使用管道
echo ./{folderName}/*.txt | xargs perl -i -p -e "s/\r//"
echo 的解释,@ikegami 提出为什么 echo 不会给出 "too many argument"
原因是 echo 是内置命令,不会将参数传递给新进程。