使用 bash 中的 find 根據擴展模式對填充進行操作

使用 bash 中的 find 根據擴展模式對填充進行操作

我正在使用“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需要命令列中至少有一個路徑。

相關內容