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

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

rm -f *.pdf

我收到以下错误:

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

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


当前回答

你可以用这个表扬

find -name "*.pdf"  -delete

其他回答

一个比使用xargs更安全的版本,也不是递归的:ls-p | grep-v“/$”| grep“\.pdf$”|读取文件时;do rm“$file”;完成

在这里过滤我们的目录有点不必要,因为“rm”无论如何都不会删除它,为了简单起见,可以删除它,但为什么要运行肯定会返回错误的东西呢?

当一个应用程序创建了数百万无用的日志文件,填满了所有inode时,我也遇到过类似的问题。我求助于“定位”,将所有“定位”的文件放入文本文件,然后逐一删除。花了一段时间,但完成了任务!

删除目录/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黑客

我在将源目录复制到目标目录时遇到了同样的问题

源目录包含文件约3 lakcs

我使用cp和选项-r,这对我很有用

cp-r abc/def/

它会将所有文件从abc复制到def,而不会发出参数列表过长的警告

使用GNU并行(sudo apt install parallel)非常简单

它以多线程方式运行命令,其中“{}”是传递的参数

E.g.

ls/tmp/myfiles*|并行“rm{}”