我在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

其他回答

参数列表太长

作为cp、mv和rm的问题标题,但答案主要代表rm。

Un*x命令

仔细阅读命令的手册页!

对于cp和mv,有一个-t开关,用于目标:

find . -type f -name '*.pdf' -exec cp -ait "/path to target" {} +

and

find . -type f -name '*.pdf' -exec mv -t "/path to target" {} +

脚本方式

bash脚本中使用了一个整体解决方案:

#!/bin/bash

folder=( "/path to folder" "/path to anther folder" )

if [ "$1" != "--run" ] ;then
    exec find "${folder[@]}" -type f -name '*.pdf' -exec $0 --run {} +
    exit 0;
fi

shift

for file ;do
    printf "Doing something with '%s'.\n" "$file"
done

你可以用这个表扬

find -name "*.pdf"  -delete

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

如果你想删除30/90天以上(+)或30/90天以下(-)的文件/文件夹,可以使用以下ex命令

例如:对于删除90天文件/文件夹后的90天不包括上述内容,这意味着91、92……100天

find <path> -type f -mtime +90 -exec rm -rf {} \;

例如:对于您想要删除的最近30天的文件,请使用以下命令(-)

find <path> -type f -mtime -30 -exec rm -rf {} \;

如果你想保存文件超过2天

find <path> -type f -mtime +2 -exec gzip {} \;

如果您只想查看过去一个月的文件/文件夹。前任:

find <path> -type f -mtime -30 -exec ls -lrt {} \;

30天以上,然后列出文件/文件夹前任:

find <path> -type f -mtime +30 -exec ls -lrt {} \;

find /opt/app/logs -type f -mtime +30 -exec ls -lrt {} \;

一个更短更可靠的呢?

for i in **/*.pdf; do rm "$i"; done