2013-11-27 62 views
19

我有一個包含幾TB文件的目錄。我想刪除其中14天以前的每個文件。在bash中查找超過X天的文件並刪除

我以爲我會用find . -mtime +13 -delete。爲了確保命令按預期工作,我跑了find . -mtime +13 -exec /bin/ls -lh '{}' \; | grep '<today>'。後者不應該返回任何內容,因爲在find下使用-mtime +13不能找到今天創建/修改的文件。但令我驚訝的是,find只是列出了今天修改/創建的所有文件!

+0

你確定你還是別人沒有修改過這些文件嗎? –

+0

查看'-daystart'選項。你的查找計數完全是24 * 13小時後,留下的文件可能是24 * 13 - 1分鐘,然後你的另一個發現將找到那些。 –

+2

只是想通了!原因是'ls'。 'find'找到一個mtime +13的目錄,'ls'只需列出它的所有內容,無論文件有多少次(facepalm!)。 – user3040975

回答

24
find your/folder -type f -mtime +13 -exec rm {} \; 
+6

對包含空格的文件名不起作用。要麼(GNU特定的)'find -delete'或'find -print0 | xargs -0 rm' – grebneke

+4

@grebneke:你可以用例子或事實來備份你的陳述嗎?衆所周知'find'的'{}'在文件名中的空格和有趣的符號上是安全的。 –

+1

這適用於我爲redhat linux/bash帶有空格的文件名。 – gaoithe

5

這適用於我。

$ find ./folder_name/* -type f -mtime +13 -print | xargs rm -rf 
+3

'-r'開關沒用。此外,如果您的文件名包含空格或其他有趣的符號,則會遇到問題。如果您的實用程序支持它們,請使用'-print0'和'xargs -0 ...',否則使用@ Mindx的答案。或者,如果你的'find'支持它,使用'find'的'-delete'測試如下:'find ./folder_name -type f -mtime +13 -delete'。 –

+4

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – gunr2171

相關問題