“rm files*”是否會刪除所有子目錄中的所有符合項目?

“rm files*”是否會刪除所有子目錄中的所有符合項目?

我想wordpress-891.sql從目前目錄(而不是子目錄內)中刪除任何看起來像的檔案。

rm wordpress-*.sql成功還是會從子目錄中刪除匹配項?

答案1

*不。rm

如果目錄名稱匹配,則不會將其刪除 - 您需要該-r標誌來刪除目錄。

因此,如果您確定要刪除這些文件,那麼這樣做是安全的。

還可以進行rm互動

rm -i wordpress-*.sql

然後在刪除每個文件之前會要求確認

答案2

是的,它可以為您解決問題並刪除當前目錄中具有該架構的所有檔案。不,它不會刪除子目錄中的檔案。

當您不確定執行以下命令時會發生什麼:

rm wordpress-*.sql

然後只需使用以下命令運行它ls

ls wordpress-*.sql

您在輸出中看到的檔案將被刪除。

當您嘗試取得類似以下的清單時foo*,最好使用-dswitch with來防止列出名為etcls的目錄中的檔案。foobar/

ls -d foo*

此技巧適用於不用於遞歸完成工作的命令。

您可以做的另一件事是鍵入所需的輸入,例如:wordpress-*然後按Ctrl+ Alt+ *,現在所有符合項目都會在您的命令前面自動鍵入。

答案3

不,rm不透過子目錄遞歸。

刪除所有子目錄中的符合文件有關刪除子目錄中檔案的方法。

如果您擔心意外刪除重要內容,請使用gvfs-trash(將文件發送到垃圾箱)而不是rm(永久刪除文件)。

答案4

如果您想尋找並刪除所有符合的文件,例如wordpress-*.sql,您可以使用find命令。 :)

例如,您想要刪除所有與wordpress-*.sqlunder相符的文件test_dir,請執行以下操作。

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

每當find程式真正找到匹配的檔案時,它都會嘗試執行-exec選項後面的命令。在這種情況下rm -f {}將被執行並被{}更改為匹配的檔案名稱。例如

rm -f wordpress-169.sql

您也可以使用選項設定子目錄的深度-maxdepth

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

請注意,您必須-maxdepth在其他選項之前指定選項。否則你可能會遇到你不想看到的結果。

相關內容