
發現了一些類似的問題,但不太匹配。
我有一個備份目錄 (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 +7
將m+7
匹配其年齡向下舍入到下一個整數天數且嚴格大於 7 的文件,因此將匹配 8 天或更早的文件(使用 時的常見陷阱find
)。
若要同時刪除舊的隱藏文件,請新增D
glob 限定符。
如果沒有符合的文件,您將收到一條錯誤訊息。您可以透過添加N
glob 限定符來避免它(然後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
。