回答
這將做到這一點遞歸您:
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