刪除目錄樹中所有 *.foo

刪除目錄樹中所有 *.foo

如何刪除目錄樹中的所有 *.foo?

rm -r *.foo

不起作用。

我可以嘗試一個循環,但這需要遞歸擴展:

for x in */*/.../*.foo
    do rm $x
done

這也是不可能的。

答案1

您可以使用find

find -name '*.foo' -delete

答案2

假設您有 bash 的最新版本:

shopt -s globstar
rm -- **/*.foo

答案3

您可以嘗試使用查找:

find /dir/path -name *.foo -exec rm -f {} \;

答案4

最簡單的解決方案之一是使用帶有參數的 find 命令exec

find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;

這將查找所有名為 *.foo 的檔案並對每個檔案執行 rm {filename} 。

如果您有很多文件,使用命令xargs可能會更快:

find /path/where/to/start/search -type f -name "*.foo" | xargs rm 

這將找到所有文件,並將文件名放在 rm 命令後面,直到您的發行版/shell 支援的命令的最大長度,所以當運行時它將是這樣的:

rm dir1/file1.foo dir1/file2.foo dir1/file3.foo 

正如您可以想像的那樣,現在rm二進位檔案需要啟動的次數要少得多,這使得這是一個更快的選擇。

相關內容