如何刪除特定資料夾中具有特定副檔名的所有檔案?

如何刪除特定資料夾中具有特定副檔名的所有檔案?

如果我將目前/工作目錄(使用導航到它cd)設定為某個特定目錄,然後鍵入:

rm *.xvg

這個指令會做什麼?上面的命令是否真的會僅有的刪除副檔名的文件.xvg 僅有的在工作目錄中?

在詢問之前我對嘗試這個感到緊張,因為我想絕對確定上面的命令只會刪除.xvg文件位於工作目錄中

答案1

是的,rm *.xvg僅有的刪除目錄下指定副檔名的文件目前的目錄。

A好的確保您確實位於要刪除檔案的目錄中的方法是使用pwd將顯示目前目錄的命令,然後執行操作ls以驗證您是否找到了所需的檔案。

如果您對發出該命令有點擔心rm,您可以執行以下兩件事:

  1. 鍵入ls *.xvg以查看受此命令影響的文件的清單。

  2. 除非你有一個很多文件的數量,您也可以始終使用-i命令列開關 for rm(也存在於cpmv)。使用時rm -i *.xvg會提示您輸入每個單獨的檔案(如果可以刪除它),因此您可以確保沒有任何意外的內容被刪除。 (如果你有很多文件,這會很無聊:)

答案2

您不需要導航到目錄,只需使用

rm /some/dir/*.xvg 

如果路徑中有拼字錯誤或類似錯誤,其中 /som/dir 不存在:

cd /som/dir
rm *.xvg

會意外刪除目前目錄中的所有 .xvg 檔案。第一個命令不會,並且您不需要再次 cd 返回。

另一種方法是使用 find:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

答案3

是的,rm *.xvg只會刪除.xvg目前目錄中以 結尾的檔案。原因如下。

當您鍵入這樣的命令時,工作將在您使用的 shell(假設是 bash)和命令二進位檔案之間指派。

您可以透過鍵入 來找到二進位檔案which rm。這個小程式負責取消連結檔。像這樣的程式可以從命令列啟動,並且可以prog arg1 arg2 arg3在啟動時讀取參數列表。在 的情況下rm,它們被解釋為要刪除的完全限定檔案名稱的清單。因此,如果您位於包含該文件的目錄中foo.bar,則鍵入的delete 'foo.*'結果將是rm: foo.*: No such file or directory.請注意檔案模式周圍的單引號,它們告訴 shell 將參數原樣傳遞給 shell。

但是,如果您rm *.bar在同一目錄中鍵入,則會刪除該檔案。這裡發生的情況是,您的 shell(您用來輸入命令的程式)在將參數傳遞給命令之前正在執行一些轉換。其中之一稱為“檔案名稱擴充”,也稱為“通配符”。您可以看到 bash 檔案名稱擴充列表這裡。最常見的擴充功能之一是*,它擴展為目前目錄中的檔案名稱。

查看工作中的 glob 的一個簡單方法是使用echo,它會列印回透過 shell 傳遞給它的所有參數。因此echo *在同一目錄中輸入將輸出foo.bar.因此,當您鍵入 時rm *.bar,實際發生的情況是 shell 將參數清單擴展為foo.bar,然後將其傳遞給rm命令。

有一些控制通配符的方法。例如,在最新版本的 bash 中,您可以開啟名為 globstar 的選項,該選項將進行遞歸擴充。鍵入echo **/*.bar將顯示以所有子資料夾結尾的所有檔案的清單.bar。因此,輸入rm **/*.bar啟用 globstar 的 bash 確實會遞歸刪除子資料夾中的所有符合檔案。

答案4

命令 :

  rm ./*.pgm

為我工作

命令:

rm *.pgm

給出錯誤命令(波蘭語,翻譯):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)

相關內容