![如何記錄 xargs -0 rm?](https://rvso.com/image/76409/%E5%A6%82%E4%BD%95%E8%A8%98%E9%8C%84%20xargs%20-0%20rm%EF%BC%9F.png)
我有一個簡單的需求,即遞歸查找並刪除特定擴展名的檔案。因此,我有語法可以查找並刪除文件並將它們通過管道傳輸到xargs -0 rm
,但我似乎無法創建已刪除文件的日誌。
到目前為止我所擁有的:
find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
答案1
rm
刪除檔案時通常是靜默的。如果您想建立顯示已刪除檔案的日誌,請新增該-v
選項。因此,替換:
xargs -0 rm
和:
xargs -0 rm -v >log
答案2
您可以使用find
它本身來刪除文件,同時將它們的名稱寫入標準輸出:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile
筆記:-delete
和選項的順序-print
很重要。只有當第一個選項傳回 true 時才會套用第二個選項,也就是如果第一個-delete
選項無法刪除文件,則其名稱將不會列印到標準輸出。如果你放在-print
前面,那麼它會將檔案名稱放入標準輸出,無論是否-delete
真的可以刪除該檔案。
筆記2:我必須轉義括號和垂直線才能使正則表達式預設與我的系統的find
util 一起工作。或者,您可以指定-regextype
為posix-egrep
,例如。無論如何,值得先嘗試find
不帶選項的命令-delete
來檢查它是否正確找到文件:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print