
如何刪除目錄樹中的所有 *.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
二進位檔案需要啟動的次數要少得多,這使得這是一個更快的選擇。