我的文件夹构造器如下所示:
folder1
---tmp
---sub1
folder2
---tmp
---sub2
folder3
---tmp
---sub3
folder4
---tmp
---sub4
我要删除所有tmp文件夹中超过30天的文件。
ls -d */tmp
find . -mtime +30 -type f -delete
我可以将这两个步骤组合成一个命令行吗?
答案 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