![删除超过 7 天的文件](https://linux22.com/image/1049327/%E5%88%A0%E9%99%A4%E8%B6%85%E8%BF%87%207%20%E5%A4%A9%E7%9A%84%E6%96%87%E4%BB%B6.png)
我写了下面的命令来删除所有超过 7 天的文件,但它不起作用:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
我怎样才能删除这些文件?
答案1
name
正如@Jos 指出的那样,你错过了和之间的空格'*.gz'
;也为了加快命令使用-type f
选项来运行命令F仅限文件。
因此固定命令为:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
解释:
find
:用于查找的 unix 命令F莱斯/d教区/升油墨等/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 --
从男人找到:
-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
仅在最后运行一次,而不是每次找到文件时都运行,并且此命令几乎与-delete
在现代中使用以下选项一样快find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
答案2
使用 find 删除文件时要小心。使用 -ls 运行命令来检查要删除的内容
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
。然后从历史记录中拉出命令并附加-exec rm {} \;
限制 find 命令可能造成的损害。如果您只想从一个目录中删除文件,则-maxdepth 1
阻止 find 遍历子目录或在您输入错误时搜索整个系统/media/bkfolder /
。
我添加的其他限制是更具体的名称参数,例如-name 'wncw*.gz'
,添加更新时间 -mtime -31
,以及引用搜索的目录。如果您要自动执行清理,这些尤其重要。
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;