看板 Knuckles_note
作者 標題 [Linux] 用find刪除目錄下所有過期的檔案
時間 2014年05月08日 Thu. AM 08:54:41
例如要刪除目前目錄下所有超過7天未修改過的檔案 (含子資料夾下的檔案)
$ find . -mtime +7 | xargs rm
如果磁碟在 /etc/fstab 沒有被設定 noatime 的話 (新的ext4格式已沒有此設定)
也可以將 -mtime 改成 -atime
用來刪除一段時間未被讀取過的檔案
將找到的檔案用 ls -lh 的方式列出來
$ find . -mtime +7 -type f | xargs ls -lh
加上 -type f 只列出檔案,避免執行到 ls '目錄'
不過如果 find 找到的檔案為 0 個,使用 xargs 會變成單純執行 ls 列出目前的目錄檔案
可以加上 xargs 的參數 -r (--no-run-if-empty),找不到就不會執行 ls
$ find . -mtime +7 -type f | xargs -r ls -lh
若目錄中有檔案的名稱含有特殊字元
例如有 " ,會出現錯誤訊息
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
可以改用
$ find . -mtime +7 -print0 | xargs -0 ls -lh
使用 find 的 -print0 輸出 搭配 xargs 的 -0 輸入
就可以避免特殊字元的問題了
尋找大於10MB的檔案
$ find . -size +10M | xargs -r ls -lh
尋找檔名開頭為"test"的檔案
$ find . -name test* | xargs -r ls -lh
記算某個目錄下的檔案總共多大
$ du . -s
記算找到的檔案有多少個
$ find . -mtime +7 -type f | wc -l
記算找到的檔案有多大
$ find . -atime +360 -print0 | du -ch --files0-from=-
要使用 find 的 -print0 輸出搭配 du 的 --file0-from=- 輸入,不然計算會不正確
-print0 要放在搜尋條件後面
du 的 -ch c代表最後加上 tatal,h將數字改用M或G為單位
將找到的檔案移動到另一個目錄
$ find . -atime +360 | xargs mv -t ../oldfile
-t 是 mv 用來接收 find 結果的參數
一般指令因為檔案太多出現 Argument list too long 時,也可以改用 find
例如更改目前目錄下所有檔案的使用者群組
$ find . | xargs -r chown knuckles.knuckles
參考:
鳥哥的 Linux 私房菜 - 第七章、Linux 檔案與目錄管理 - 5.2 檔案檔名的搜尋:find
http://linux.vbird.org/linux_basic/0220filemanager.php#find
鳥哥的 Linux 私房菜 - 第十一章、認識與學習 BASH - 6.6 參數代換: xargs
http://linux.vbird.org/linux_basic/0320bash.php#xargs
ddy 狡兔三窟之一 xargs 應用介紹(例)
http://blog.yam.com/ddy1280/article/13941218
--
※ 作者: Knuckles 時間: 2014-05-08 08:54:41
※ 編輯: Knuckles 時間: 2021-05-23 03:56:37 (台灣)
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 579
回列表(←)
分享