我在UNIX的一个目录下有几百个PDF。PDF的名称非常长(约60个字符)。
当我尝试使用以下命令一起删除所有PDF时:
rm -f *.pdf
我收到以下错误:
/bin/rm: cannot execute [Argument list too long]
此错误的解决方案是什么?mv和cp命令是否也会出现此错误?如果是,如何解决这些命令?
我在UNIX的一个目录下有几百个PDF。PDF的名称非常长(约60个字符)。
当我尝试使用以下命令一起删除所有PDF时:
rm -f *.pdf
我收到以下错误:
/bin/rm: cannot execute [Argument list too long]
此错误的解决方案是什么?mv和cp命令是否也会出现此错误?如果是,如何解决这些命令?
当前回答
一个更短更可靠的呢?
for i in **/*.pdf; do rm "$i"; done
其他回答
rm命令对可以同时删除的文件有限制。
一种可能性是,您可以根据文件模式多次使用rm命令删除它们,例如:
rm -f A*.pdf
rm -f B*.pdf
rm -f C*.pdf
...
rm -f *.pdf
也可以通过find命令删除它们:
find . -name "*.pdf" -exec rm {} \;
之所以出现这种情况,是因为bash实际上将星号扩展到每个匹配的文件,从而产生一个非常长的命令行。
试试看:
find . -name "*.pdf" -print0 | xargs -0 rm
警告:这是一个递归搜索,也会在子目录中查找(和删除)文件。只有当您确定不需要确认时,才在rm命令中使用-f。
可以执行以下操作以使命令非递归:
find . -maxdepth 1 -name "*.pdf" -print0 | xargs -0 rm
另一个选项是使用find的-delete标志:
find . -name "*.pdf" -delete
删除目录/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 "*.pdf" -delete
仅适用于当前目录中的文件:
find -maxdepth 1 -name '*.pdf' -delete
这句话搜索当前目录(-maxdeph 1)中扩展名为pdf(-name'*.pdf')的所有文件,然后删除。
您可以使用bash数组:
files=(*.pdf)
for((I=0;I<${#files[@]};I+=1000)); do
rm -f "${files[@]:I:1000}"
done
这样,它将以每一步1000个文件的批量擦除。