我写了以下命令来删除所有早于7天的文件,但它没有起作用:
如何删除这些文件?
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
如何删除这些文件?
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
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 --
-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 的 +
终止符而不是 \;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
rm
,而不是每次找到文件都运行一次。这个命令几乎和在现代的find
中使用-delete
选项一样快。find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
来结束呢?为什么要搞这些+
或者\;
的东西呢? - rain01-maxdepth
参数非常重要。Find命令似乎默认是递归的,它会在所有子目录中搜索匹配的模式。这可能是不希望的行为,因此最好使用-maxdepth 1
来限制搜索深度。 - Joseph Kreifels II为了完整性:您也可以使用-delete
find /some/where/ -name '*.log' -type f -mtime +7 -delete
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
。然后从历史记录中找到该命令,并追加-exec rm {} \;
。-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 {} \;
。
name
和'*.gz'
之间应该有一个空格。 - Jos