使用ls和find命令删除旧文件

时间:2018-07-20 10:14:29

标签: linux bash shell

我的文件夹构造器如下所示:

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

我可以将这两个步骤组合成一个命令行吗?

1 个答案:

答案 0 :(得分:3)

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

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选项并在路径名扩展上下文中使用*时,两个相邻的*用作单个模式将匹配所有文件以及零个或多个目录和子目录。如果后跟/,则两个相邻的*仅匹配目录和子目录。

     

来源:man bash

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

感兴趣