Linux
查找和刪除具有特定日期的文件
如何刪除在
Aug 7
名稱DBG_A_sql*
下創建的文件/tmp
如下例:
-rw-r--r-- 1 root root 51091 Aug 7 11:22 DBG_A_sql.2135 -rw-r--r-- 1 root root 15283 Aug 7 11:22 DBG_A_sql.2373 -rw-r--r-- 1 root root 51091 Aug 7 11:22 DBG_A_sql.2278 -rw-r--r-- 1 root root 9103 Aug 7 11:22 DBG_A_sql.2485 -rw-r--r-- 1 root root 9116 Aug 7 11:22 DBG_A_sql.2573 -rw-r--r-- 1 root root 9140 Aug 7 11:22 DBG_A_sql.2679 -rw-r--r-- 1 root root 15695 Aug 7 11:22 DBG_A_sql.2897
您可以使用
find
. 根據您的要求和使用計算日期,find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print
確認刪除後,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete
首先,查找在某個時間創建的文件有點困難,因為創建時間通常不會保存在任何地方或者很難獲得。您所擁有的是
mtime
,或最後修改時間,ctime
即“更改”時間,會根據對 inode 的任何更改進行更新。我假設你想要修改時間。查找在給定日期修改的文件有點有趣,因為
find
似乎很難正確處理在午夜創建的文件。如果我們知道相對時間(即昨天),我們可以使用
find -daystart -mtime 1
,但它會發現文件在錯誤的午夜修改,Aug 8 00:00
. 但是,這似乎有效:find dir/ -daystart -mtime +0 \! -mtime +1 -ls
如果不想計算相對時間,並且您
find
有-newerXY
:find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls
同樣,這會使在午夜創建的文件完全錯誤,因為比較是“較新”,而不是“較新或同舊”。儘管如果您的系統具有亞秒級的時間戳精度,則可能很難達到這一點,但是如果您使用由
touch
…創建的文件進行測試,就會發生這種情況。一個毛茸茸的解決方法是這樣的:
find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls
在任何情況下,添加必要
-name "DBG_A_sql*"
的內容以僅獲取具有正確名稱的文件。您可以將-ls
末尾替換-delete
為刪除文件而不是列出。(-ls
,-delete
並且-newerXY
至少存在於 GNU find 和 OS X 上的 BSD find 中。)當然,您實際上可以解析日期的文本表示,但是
ls
如果某些小丑創建的文件中包含不可列印的字元,則很難正確處理。當然,範例文件沒有任何此類文件,但一般來說,任何人都可以創建它們,尤其是在/tmp
.(儘管
| xargs rm
您只是錯過了這些文件,並且由於文件名不能包含斜杠,因此任何人都很難將您rm
指向另一個目錄。)