我在UNIX的一个目录下有几百个PDF。PDF的名称非常长(约60个字符)。

当我尝试使用以下命令一起删除所有PDF时:

rm -f *.pdf

我收到以下错误:

/bin/rm: cannot execute [Argument list too long]

此错误的解决方案是什么?mv和cp命令是否也会出现此错误?如果是,如何解决这些命令?


当前回答

rm命令对可以同时删除的文件有限制。

一种可能性是,您可以根据文件模式多次使用rm命令删除它们,例如:

rm -f A*.pdf
rm -f B*.pdf
rm -f C*.pdf
...
rm -f *.pdf

也可以通过find命令删除它们:

find . -name "*.pdf" -exec rm {} \;

其他回答

删除目录/path/To/dir_with_pdf_files中的所有*.pdf/

mkdir empty_dir        # Create temp empty dir

rsync -avh --delete --include '*.pdf' empty_dir/ /path/to/dir_with_pdf_files/

如果您有数百万个文件,使用通配符通过rsync删除特定文件可能是最快的解决方案。它会解决你遇到的错误。


(可选步骤):干运行。检查将删除而不删除的内容`

rsync -avhn --delete --include '*.pdf' empty_dir/ /path/to/dir_with_pdf_files/

...

单击rsync提示和技巧以获取更多rsync黑客

我也遇到了同样的问题,因为一个文件夹中的临时图像与日俱增,这个命令帮助我清除了这个文件夹

find . -name "*.png" -mtime +50 -exec rm {} \;

与其他命令的不同之处在于mtime参数,该参数将只接受早于X天的文件(在示例中为50天)

多次使用这种方法,减少每天执行的次数,我能够删除所有不必要的文件

如果要同时删除文件和目录,可以使用以下命令:

echo /path/* | xargs rm -rf

你可以试试这个:

for f in *.pdf
do
  rm "$f"
done

编辑:ThiefMaster的评论建议我不要向年轻的壳牌公司的绝地武士透露这种危险的做法,所以我会添加一个更“安全”的版本(为了在有人拥有“-rf…pdf”文件时保存东西)

echo "# Whooooo" > /tmp/dummy.sh
for f in '*.pdf'
do
   echo "rm -i \"$f\""
done >> /tmp/dummy.sh

运行以上步骤后,只需在您喜爱的编辑器中打开/tmp/ddumy.sh文件,并检查每一行是否有危险的文件名,如果发现,请将其注释掉。

然后在工作目录中复制dummy.sh脚本并运行它。

所有这些都是出于安全考虑。

或者您可以尝试:

find . -name '*.pdf' -exec rm -f {} \;