Ted*_*291 185 find timestamps rm files
我找到了删除文件夹中超过 5 天的文件的命令
find /path/to/files* -mtime +5 -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
但是我该如何对该文件夹中的子目录执行此操作?
bas*_*ic6 335
管道传输到 rm 时,请注意特殊文件名(空格、引号)。
有一个安全的替代方案 - -delete选项:
find /path/to/directory/ -mindepth 1 -mtime +5 -delete
Run Code Online (Sandbox Code Playgroud)
就是这样,没有单独的 rm 调用,您无需担心文件名。
更换-delete与-depth -print你运行它(之前测试这个命令-delete意味着-depth)。
Jul*_*ius 19
请注意,此命令在找到太多文件时将不起作用。它会产生如下错误:
bash: /usr/bin/find: Argument list too long
Run Code Online (Sandbox Code Playgroud)
这意味着超出了 exec 系统调用对命令行长度的限制。与以这种方式执行 rm 不同,使用xargs效率更高。这是一个有效的例子:
find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm
Run Code Online (Sandbox Code Playgroud)
这将在 /root/Maildir/ 下递归删除所有修改时间超过 14 天的文件(类型 f),并且更深(mindepth 1)。有关更多选项,请参阅查找手册。
apa*_*aul 10
一样的。您只需要提供父目录而不是文件前缀。在您的示例中,它将是:
find /path/to -type f -mtime +5 -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
这将删除 5 天之前的所有文件/path/to及其子目录。
要删除空的子目录,请参阅上面的@Costas 评论。