我在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命令是否也会出现此错误?如果是,如何解决这些命令?
当前回答
如果你想删除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
或者您可以尝试:
find . -name '*.pdf' -exec rm -f {} \;
另一个答案是强制xargs成批处理命令。例如,要一次删除文件100,请cd到目录中并运行以下命令:
echo*.pdf | xargs-n 100 rm
如果您试图一次删除大量文件(我今天删除了一个485000+的目录),您可能会遇到以下错误:
/bin/rm: Argument list too long.
问题是,当您键入类似rm-rf*的内容时,*将被替换为每个匹配文件的列表,如“rm-rf file1 file2 file3 file4”等。分配了一个相对较小的内存缓冲区来存储此参数列表,如果该缓冲区已满,shell将不会执行程序。
为了解决这个问题,很多人会使用find命令查找每个文件,并将它们逐一传递给“rm”命令,如下所示:
find . -type f -exec rm -v {} \;
我的问题是我需要删除50万个文件,而且时间太长了。
我偶然发现了一种更快的删除文件的方法——“find”命令内置了“-delete”标志!以下是我最终使用的:
find . -type f -delete
使用这种方法,我以每秒2000个文件的速度删除文件,速度快得多!
您还可以在删除文件名时显示文件名:
find . -type f -print -delete
…甚至显示将删除多少文件,以及删除这些文件所需的时间:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s
如果你想删除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 {} \;