題 如何在linux上刪除大於某個日期的文件


有時我會將存檔提取到錯誤的文件夾中,並希望移動或刪除新提取的文件。

通過命令行執行此操作的最簡單方法是什麼?我可以以某種方式搜索所有比提取時間更新的文件並將其導入到rm中嗎?

謝謝


4
2017-09-26 23:07


起源




答案:


編輯: 如評論中所述, tar 修改提取文件的mtime和ctime以匹配存檔中的日期,因此第一種方法將不起作用,除非 -m 在提取過程中使用了flag。最後一種方法是最佳的,但如果文件名發生衝突,可能會導致刪除所需的文件。

find 支持一個 -newer  file 標誌,指定它應該找到比文件更新的文件 文件touch 有一個-t參數來修改文件的訪問/修改時間。所以要修復在晚上7:25:30左右發生的oops:

$ tar xzf whoops.tar.gz
$ touch -t 200909261925.30 whoops-timestamp
$ find . -newer whoops-timestamp

如果您確信顯示了正確的文件:

$ find . -newer whoops-timestamp -print0 | xargs -0 rm -v

另一種方法是刪除剛剛解壓縮的歸檔中列出的所有文件:

$ tar tfz whoops.tar.gz | xargs rm -v

12
2017-09-26 23:17



(+1)最後一個選項是最好的。它比OP的想法更安全,更好。 - nagul
問題:tar會不會將修改時間設置為原始文件的時間?在比較期間,是否會找到使用修改時間(與更改時間?)? - ericslaw
謝謝!我用最後一種方式做到了。存檔實際上是一個zip,所以我做了zipinfo -1 blah.zip | xargs rm -v - Tarski
@ericslaw Yup,似乎確實如此。 tar 除非您使用,否則將保留檔案中的日期 -m 旗。因此,第一種方法不能作為一般規則。 - Annika Backstrom


查找的另一種選擇:

$ find "/path/to_clean/" -type f -mtime +30 -print0 | xargs -0 rm -f

其中+30是您希望保留的天數。


2
2017-09-26 23:47