我在UNIX的目录下有几百个PDF.PDF的名称非常长(大约60个字符).
当我尝试使用以下命令一起删除所有PDF时:
rm -f *.pdf
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/bin/rm: cannot execute [Argument list too long]
Run Code Online (Sandbox Code Playgroud)
这个错误的解决方案是什么?这个错误是否也出现在命令mv和cp命令中?如果是,如何解决这些命令?
我浏览了Stack Overflow上的很多帖子以及关于这个argument list too long主题的一些相关社区,我似乎没有清楚地知道长度限制是否适用于shell内置函数.
假设我想通过标准输入将一个非常长的字符串传递给命令:
string="a very long list of words ..."
Run Code Online (Sandbox Code Playgroud)
我能说......么:
# not using double quotes around $string is deliberate
printf '%s\n' $string | cmd ...
Run Code Online (Sandbox Code Playgroud)
要么
cmd <<< $string
Run Code Online (Sandbox Code Playgroud)
甚至可以将它传递给xargs:
printf '%s\n' $string | xargs cmd ...
Run Code Online (Sandbox Code Playgroud)
有人可以澄清一下吗?
我试图清除一些垃圾邮件,但遇到了一个问题。队列中的文件数量太大,我通常的命令无法处理。它会给我一个关于太多参数的错误。
我通常这样做
grep -i user@domain.com 1US* | awk -F: '{print $1}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
1US* 可以是 1US[a-zA-Z] 之间的任何值。我唯一能做的就是运行这个可怕的装置。它的一个文件,包含 1USa、1USA、1USb 等,贯穿整个字母表。我知道他们必须是一种更有效地运行它的方法。
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USa* | awk -F: '{print $1}' | xargs rm
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USA* | awk -F: '{print $1}' | xargs rm
Run Code Online (Sandbox Code Playgroud)