find /path/to/files* -mtime +5 -exec rm {} \;
但是我也该如何对该文件夹中的子目录执行此操作?
#1 楼
输送到rm时,请注意特殊文件名(空格,引号)。还有一个安全的选择--delete选项:
find /path/to/directory/ -mindepth 1 -mtime +5 -delete
就这样,没有单独的rm调用,您不必担心文件名。
在运行命令之前,将
-delete
替换为-depth -print
来测试此命令(-delete
表示-depth
)。 >评论
还可以使用-type f仅删除文件(并保留子目录)
–奥列格(Oleg)
16 Mar 4 '16 at 8:44
或者,如果要对所有不超过五天的文件执行相同的操作:查找/ path / to / directory / -mindepth 1 -mtime -5 -delete
–zmonteca
16-4-19在17:29
@ uom-pgregorio我建议将路径用引号引起来。
–条纹
17-10-6在14:40
请注意,每个find参数都是一个使用前一个过滤器的结果作为输入的过滤器。因此,请确保将-delete添加为最后一个参数。 IE:找到。 -delete -mtime +5将删除当前路径中的所有内容。
–约翰
19年1月1日,11:39
使用选项-mmin代替-mtime,可以以分钟为单位指定时间。
– zyy
20年1月30日,下午2:31
#2 楼
请注意,该命令在找到太多文件时将不起作用。它将产生如下错误:bash: /usr/bin/find: Argument list too long
意味着超出了exec系统调用对命令行长度的限制。与以这种方式执行rm相比,使用xargs效率更高。这是一个有效的示例:
find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm
这将从/ root / Maildir /下递归删除超过14天之前修改过的所有文件(类型f),然后从该目录中更深的位置(最深1)。有关更多选项,请参见查找手册。
评论
按照@AfshinHamedi在AskUbuntu上的回答(askubuntu.com/questions/589210/removing-files-older-than-7-day),请小心包含换行符和特殊字符的文件。而是使用find / root / Maildir / -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm-
– Cbhihe
16年7月12日在8:17
或者只是在搜索结果中添加“ +”
–Dani_l
17年4月2日在11:07
#3 楼
一样的。您只需要提供父目录而不是文件前缀即可。在您的示例中,它将是:find /path/to -type f -mtime +5 -exec rm {} \;
这将删除
/path/to
及其子目录下的所有5天以上的文件。要删除空的子目录,请参阅上面的@Costas注释。
评论
请注意,对于每个文件,您将执行rm命令。如果您有1000个文件早于5天,则rm将启动1000次。因此,请考虑在Costa的注释中使用-delete选项,或者使用-exec rm {} \ +
–亨尼斯
2015年4月7日在17:14
@Hennes:-1)在这种情况下,不确定是否需要转义。 -2)最好编写-exec rm'{}'+来防止名称中带有特殊字符(空格,换行符等)的文件损坏。
– Cbhihe
16年7月12日在9:04
#4 楼
find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf
评论
这似乎与眼前的问题无关。
– Kusalananda♦
20年4月3日,15:50
评论
您是指子目录中的文件吗?还是子目录本身?找到/ path / to -type d -empty -delete
删除也存在5天以上的子目录中的文件
当我的文件带有空格时,可能会很有趣。例如,一个名为“ test one”的文件,rm获得rm test one。 (这将删除名为“ test”的文件和名为“ one”的文件,但不会删除名为“ test one”的文件)。提示:-delete或-print0
作为附带说明,请始终引用find提供的参数,以避免出现特殊字符的问题,如答案的第一行中所述。例如:find / path / to / files / -exec somecommand'{}'\;