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

其他回答

如果它们是带有空格或特殊字符的文件名,请使用:

find -name "*.pdf"  -delete

仅适用于当前目录中的文件:

find -maxdepth 1 -name '*.pdf' -delete

这句话搜索当前目录(-maxdeph 1)中扩展名为pdf(-name'*.pdf')的所有文件,然后删除。

你可以试试这个:

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脚本并运行它。

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

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

echo /path/* | xargs rm -rf

对于这个问题,下面的选项似乎很简单。我从其他线程获得了这些信息,但它对我有所帮助。

for file in /usr/op/data/Software/temp/application/openpages-storage/*; do
    cp "$file" /opt/sw/op-storage/
done

只需运行上面的一个命令,它就会完成任务。

如果你想删除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 {} \;