我的目录名为:
2012-12-12
2012-10-12
2012-08-08
Run Code Online (Sandbox Code Playgroud)
如何使用bash shell脚本删除超过10天的目录?
sam*_*hen 354
这将以递归方式为您执行:
find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
说明:
find:用于查找文件/目录/链接等的unix命令/path/to/base/dir:开始搜索的目录.-type d:只找到目录-ctime +10:只考虑修改时间超过10天的那些-exec ... \;:找到每个这样的结果,执行以下命令 ...rm -rf {}:递归强制删除目录; 该{}部分是查找结果从前一部分替换的位置.或者,使用:
find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
哪个更有效率,因为它相当于:
rm -rf dir1 dir2 dir3 ...
Run Code Online (Sandbox Code Playgroud)
而不是:
rm -rf dir1; rm -rf dir2; rm -rf dir3; ...
Run Code Online (Sandbox Code Playgroud)
就像在-exec方法中一样.
对于现代版本find,您可以替换;with +,它将xargs为您执行相应的调用,传递适合每个exec系统调用的文件:
find . -type d -ctime +10 -exec rm -rf {} +
Run Code Online (Sandbox Code Playgroud)
小智 39
如果你想删除所有子目录下/path/to/base,例如
/path/to/base/dir1
/path/to/base/dir2
/path/to/base/dir3
Run Code Online (Sandbox Code Playgroud)
但你不想删除root /path/to/base,你必须添加-mindepth 1和-maxdepth 1选项,这将只访问下的子目录/path/to/base
-mindepth 1/path/to/base从比赛中排除根.
-maxdepth 1将只匹配立即下的子目录/path/to/base,如/path/to/base/dir1,/path/to/base/dir2和/path/to/base/dir3,但不会列出这些子目录递归的方式.因此,不会列出这些示例子目录:
/path/to/base/dir1/dir1
/path/to/base/dir2/dir1
/path/to/base/dir3/dir1
Run Code Online (Sandbox Code Playgroud)
等等.
因此,要删除/path/to/base超过10天的所有子目录;
find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
Ond*_*žka 18
find支持-delete操作,所以:
find /base/dir/* -ctime +10 -delete;
Run Code Online (Sandbox Code Playgroud)
我认为有一个问题,文件也需要10天以上.没试过,有人可能会在评论中确认.
这里投票最多的解决方案是丢失的,-maxdepth 0所以rm -rf在删除之后它会调用每个子目录.这没有意义,所以我建议:
find /base/dir/* -maxdepth 0 -type d -ctime +10 -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
-delete上面的解决方案没有使用-maxdepth 0因为find会抱怨dir不是空的.相反,它暗示-depth并从下往上删除.
| 归档时间: |
|
| 查看次数: |
218199 次 |
| 最近记录: |