回答
这将做到这一点递归您:
find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf {} \;
说明:
find
:查找文件/目录/链接等/path/to/base/dir
UNIX命令:目录开始搜索英寸-type d
:only f IND目录-ctime +10
:只考虑修改时间的那些早于10天-exec ... \;
:找到的每个这样的结果,在执行下面的命令...
rm -rf {}
:递归强制删除目录;{}
部分是查找结果从前一部分代入的位置。
另外,使用:
find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf
哪个多一点有效,因为它相当于:
rm -rf dir1 dir2 dir3 ...
,而不是:
rm -rf dir1; rm -rf dir2; rm -rf dir3; ...
与-exec
方法一样。
注意:另请参阅@ MarkReed关于首选使用现代版本find
的评论。
使用现代版本的'find',你可以用'+'替换''',它将为你执行'xargs'的调用,传递的文件数量与每个'exec'系统调用相同:''找 。 -type d -ctime +10 -exec rm -rf {} +' –
感谢你们俩。我可以通过命令以某种方式传递父目录。 – bobsr
@bobsr查看更新后的答案:开始搜索的基本目录被指定为find后的第一个参数。 –
如果你想删除/path/to/base
下的所有子目录,例如
/path/to/base/dir1
/path/to/base/dir2
/path/to/base/dir3
,但你不想删除根/path/to/base
,你必须添加-mindepth 1
和-maxdepth 1
选项,这将只能访问子目录/path/to/base
-mindepth 1
从匹配中排除根/path/to/base
。
-maxdepth 1
将ONLY比赛子目录下立即/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
等等。
因此,要删除所有在/path/to/base
之下的超过10天的子目录;
find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf
我挣扎着爬使用上面提供的脚本和其他一些脚本尤其是这权当文件和文件夹名称有新行或空格。
最后偶然发现了tmpreaper,到目前为止它已经很好地工作了。
tmpreaper -t 5d ~/Downloads
tmpreaper --protect '*.c' -t 5h ~/my_prg
原文出处link
有如测试,递归地检查目录,并列出它们的功能。 能够删除符号链接,文件或目录,也是保护模式一定的模式,同时删除
OR
rm -rf `find /path/to/base/dir/* -type d -mtime +10`
更新,它的速度更快的版本:
find /path/to/base/dir/* -mtime +10 -print0 | xargs -0 rm -f
这个很容易超过最大命令行长度。请参阅'xargs --show-limits'。 –
如果有包含空格或其他特殊外壳字符的文件名,这也不起作用。 – Carpetsmoker
@Carpetsmoker不是'-print0' /'-0'照顾特殊的外壳字符,或不是? – mpen
find
支持-delete
操作,所以:
find /base/dir/* -ctime +10 -delete;
我认为这些文件需要比旧版本老10多天。没有尝试过,有人可能会在评论中确认。
这里投票最多的解决方案是缺少-maxdepth 0
,所以它会在删除它后为每个子目录调用rm -rf
。这是没有意义的,所以我建议:
find /base/dir/* -maxdepth 0 -type d -ctime +10 -exec rm -rf {} \;
的-delete
解决方案中没有使用-maxdepth 0
因为find
会抱怨dir是不是空的。相反,它意味着-depth
并从底部删除。
我可以确认'-delete'的作品,但正如你所说的,你只能用它来删除空目录,很像'rmdir'。 – CTodea
- 1. shell脚本 - (删除子串)
- 2. 删除文件shell脚本
- 3. 的CentOS删除n天前
- 4. 执行n行shell脚本
- 5. C Shell脚本 - 删除PathName达到FileName
- 6. Linux的shell脚本删除数字
- 7. 使用shell脚本删除换行符
- 8. 的Unix Shell脚本删除 - 从文件
- 9. Shell脚本删除一组文件
- 10. shell脚本删除文件移动
- 11. 如何删除在shell脚本
- 12. Shell脚本用于删除craskernel
- 13. linux | awk | shell脚本块删除
- 14. 在shell脚本删除某些字符
- 15. shell脚本在ubuntu上删除备份
- 16. 创建和删除每个shell脚本
- 17. 从shell脚本中删除Node.js程序
- 18. Shell脚本删除负整数
- 19. 优化Bash脚本,删除子shell
- 20. 使用Unix Shell脚本从HBASE中删除30天以前的快照使用Unix Shell脚本
- 21. 电源Shell脚本备份旧的15天删除日志文件
- 22. 在Unix中使用shell脚本删除超过10天的文件
- 23. 用于删除ftp服务器上x天以前的文件的shell脚本
- 24. 在n天后删除MongoDB文档
- 25. 在shell脚本中查找天
- 26. Shell脚本删除字符串前后的文本
- 27. Shell脚本 - 比较文本行,删除匹配项
- 28. 删除 '\ n \ n。' C++
- 29. php删除脚本
- 30. shell的shell脚本
要他们在他们的实际创建/修改时间裸露任何关系?因为'find'可以在不查看名称的情况下执行此操作...... – Wrikken
他们应该在其上创建/修改时间 – bobsr
“年龄大于”是什么意思?你指的是创建目录的时间,内容最后更改的时间,还是其他内容?请注意下面的一些答案; 'ctime'是inode更改时间。对于目录,当文件被添加或从目录中删除时,它会改变。 – ajk