僅刪除超過 7 天的檔案:-mtime 和 find

僅刪除超過 7 天的檔案:-mtime 和 find

發現了一些類似的問題,但不太匹配。

我有一個備份目錄 (sql),想要刪除該目錄中超過 7 天的所有文件,並保持所有子目錄完好無損。

這就是我所擁有的:

find /var/log/mbackups -mtime +7 -type f -delete

這是實現我所追求的目標的正確方法嗎?

答案1

您的指令將查看頂級目錄/var/log/mbackups,並深入任何子目錄,刪除符合 7 天標準的檔案。它不會刪除目錄本身。

如果您希望命令僅查看/var/log/mbackups目錄中的文件,並且不降到子目錄,您需要新增該限制:

find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete

一般來說,您可以find透過-delete用無害的內容替換操作來測試命令,例如-print(正如暗示的那樣-depth,您在這裡也需要):-delete-depth

find /var/log/mbackups -depth -mtime +7 -type f -print

答案2

使用 zsh:

rm -f /var/log/mbackups/*(.m+6)

與...一樣:

rm -f /var/log/mbackups/*(.^m-7)

.將刪除未隱藏且在過去 7 天內未修改的常規(帶有)檔案。與 的 一樣find-mtime +7m+7匹配其年齡向下舍入到下一個整數天數且嚴格大於 7 的文件,因此將匹配 8 天或更早的文件(使用 時的常見陷阱find)。

若要同時刪除舊的隱藏文件,請新增Dglob 限定符。

如果沒有符合的文件,您將收到一條錯誤訊息。您可以透過添加Nglob 限定符來避免它(然後rm將在沒有檔案名稱參數的情況下調用,但使用-f,它不應該抱怨它)。

答案3

免責聲明:我是 rawhide (rh) 的當前作者(請參閱https://github.com/raforg/rawhide

幾乎。非常接近。您嘗試的正確版本是:

find /var/log/mbackups -maxdepth 1 -mtime +6 -type f -delete

如果你發現尋找-mtime謂詞參數不夠直觀,您可以使用生皮右旋) 反而:

rh -UUU -r /var/log/mbackups 'f && old(7*days)'

-UUU取消連結/刪除/刪除匹配項。

-r就好像尋找的,-mindepth 1 -maxdepth 1並且僅搜尋搜尋路徑下方的一級,因此不會搜尋子目錄。

f匹配常規文件。

old(7*days)配對至少 7 天前最後修改的內容。

答案4

警告:-delete使用時是非標準的(不可移植的)且有風險 gfind

請記住,它rm有一些安全限制,但gfind手冊頁沒有提到-delete.因此我建議使用官方方法:

find /var/log/mbackups -mtime +7 -type f -exec rm {} +

這甚至不比使用非標準方法慢-delete

相關內容