我找到了删除文件夹中5天以上文件的命令。

find /path/to/files* -mtime +5 -exec rm {} \;


但是我也该如何对该文件夹中的子目录执行此操作?

评论

您是指子目录中的文件吗?还是子目录本身?

找到/ 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'{}'\;

#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