如果我將目前/工作目錄(使用導航到它cd
)設定為某個特定目錄,然後鍵入:
rm *.xvg
這個指令會做什麼?上面的命令是否真的會僅有的刪除副檔名的文件.xvg
僅有的在工作目錄中?
在詢問之前我對嘗試這個感到緊張,因為我想絕對確定上面的命令只會刪除.xvg
文件位於工作目錄中。
答案1
是的,rm *.xvg
會僅有的刪除目錄下指定副檔名的文件目前的目錄。
A好的確保您確實位於要刪除檔案的目錄中的方法是使用pwd
將顯示目前目錄的命令,然後執行操作ls
以驗證您是否找到了所需的檔案。
如果您對發出該命令有點擔心rm
,您可以執行以下兩件事:
鍵入
ls *.xvg
以查看受此命令影響的文件的清單。除非你有一個很多文件的數量,您也可以始終使用
-i
命令列開關 forrm
(也存在於cp
和mv
)。使用時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)