【问题标题】:Delete old files using ls and find command使用 ls 和 find 命令删除旧文件
【发布时间】:2018-12-28 15:09:24
【问题描述】:

我的文件夹结构如下:

folder1
        ---tmp
        ---sub1
folder2
        ---tmp
        ---sub2
folder3
        ---tmp
        ---sub3
folder4
        ---tmp
        ---sub4

我想删除所有 tmp 文件夹中超过 30 天的文件。

列出所有 tmp 文件夹:

ls -d */tmp

删除所有超过 30 天的文件

find . -mtime +30 -type f -delete

我可以将这两个步骤合并到一个命令行中吗?

【问题讨论】:

标签: linux bash shell


【解决方案1】:

您可以做的是将您的查找中的. 替换为您要搜索的实际目录。

find */tmp -mtime +30 -type f -delete

如果tmp 可以更深几级,那么您可能会感兴趣

find . -regex '.*/tmp/[^/]+' -mtime +30 -type f -delete

或类似于第一个选项,但使用双星球状表达式(通过shopt -s globstar 启用)

find **/tmp -mtime +30 -type f -delete

* 匹配任何字符串,包括空字符串。当启用 globstar shell 选项并在路径名扩展上下文中使用 * 时,用作单个模式的两个相邻 *s 将匹配所有文件以及零个或多个目录和子目录。如果后跟/,则两个相邻的*s 将只匹配目录和子目录。

来源:man bash

注意:你必须小心。假设您有一个目录folder1/tmp/foo/,那么上述命令(正则表达式版本除外)将同时选择folder1/tmp/foo 中的文件,这可能不是我们想要的。您可能对额外选项 -maxdepth 1

感兴趣

【讨论】:

  • @jww 我也没有反对投票的问题。但是,如果您添加一些信息,我将不胜感激。如果它违反了 Stack Overflow 的工作规则,请指出规则,我会遵守。如果您因为我忽略的给定逻辑而对这个答案有疑问。然后向我解释问题是什么。我们都在这里学习和分享。 (ps 我知道commenting is not needed with downvoting,我只是好奇为什么)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2020-05-29
  • 2021-06-07
  • 2011-09-08
  • 2014-12-26
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多