
我正在使用“find”命令從我執行命令的目錄中的所有子資料夾中刪除給定擴展名的一些無用填充。
find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete
是否可以將這 4 個指令組合成一個指令,透過 1 個指令刪除 4 種類型的填充物?是否可以使用 find 來刪除所有不屬於 *.dlg 副檔名的填色?
答案1
不加引號*.txt
是不好的。看find
使用通配符時實用程式不會輸出所有文件。
是否可以將這 4 個指令合併為一個?
是的。看將多個find
命令合併為一個。
find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …
(這使用了 3 個模式,因為第四個命令重複了第一個命令,並且使用相同的模式兩次是沒有意義的。)
是否可以選擇使用
find
來刪除所有不屬於*.dlg
副檔名的檔案?
是的(我假設你想要常規文件,而不是所有文件):
find . -type f ! -name '*.dlg' # -delete
如果上述命令列印了您確實想要刪除的文件,請使用#
removed 運行它。
測試! -name '*.dlg'
被否定-name '*.dlg'
。當且僅當-name '*.dlg'
失敗時它才會成功。
您-delete
在問題中使用了,所以您find
顯然支持它。權限較低的使用者find
會看到find
:-exec rm {} \;
vs. -delete
- 為什麼廣泛推薦前者?
請注意,在您的情況下,裸露的find
工作原理類似於find .
.我find .
明確使用是因為某些實作find
需要命令列中至少有一個路徑。