当前位置: 首页>>技术教程>>正文


删除超过7天的文件

, , , ,

问题描述

我在下面写命令删除所有超过7天的文件,但它不起作用:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

我该如何删除这些文件?

最佳解决思路

@Jos指出你错过了name'*.gz'之间的空间;还用于加速命令使用-type f选项仅对文件运行命令。

所以固定命令是:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

说明:

  • find:用于查找文件/目录/链接等的unix命令。

  • /path/to/:开始搜索的目录。

  • -type f:仅查找文件。

  • -name '*.gz':以.gz结尾的列表文件。

  • -mtime +7:仅考虑修改时间超过7天的那些。

  • -execdir ... \;:对于找到的每个此类结果,请在...中执行以下命令。

  • rm -- '{}':删除文件; {}部分是查找结果从前一部分替换的位置。 --表示命令结束参数,避免对以连字符开头的文件提示错误。

或者,使用:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

来自man find

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

哪个更有效率,因为它相当于:

rm file1 file2 file3 ...

而不是:

rm file1; rm file2; rm file3; ...

如在-exec方法中。


另一种更快的命令是使用exec的+终结符而不是\;

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

此命令仅在结束时运行rm一次,而不是每次找到文件时,此命令几乎与使用现代find中的-delete选项一样快:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete

次佳解决思路

小心删除带有find的文件。使用-ls运行命令以检查要删除的内容

find /media/bkfolder/ -mtime +7 -name '*.gz' -ls。然后从历史记录中提取命令并附加-exec rm {} \;

限制find命令可以执行的操作。如果要从一个目录中删除文件,-maxdepth 1会阻止查找遍历子目录,或者如果输入错误/media/bkfolder /则搜索整个系统。

我添加的其他限制是更具体的名称参数,如-name 'wncw*.gz',添加newer-than时间-mtime -31,并引用搜索的目录。如果要自动清理,这些特别重要。

find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2562.html,未经允许,请勿转载。