在 Bash 裡,如果檔案的檔名開頭是連字號「-」(hyphen),你會發現對這些檔案下任何指令都會出問題
ls -l
總計 0
-rw-rw-r-- 1 stanley stanley 0 8月 19 16:02 -a
-rw-rw-r-- 1 stanley stanley 0 8月 19 15:48 --b
rm -a
rm:無效的選項 -- 「a」
Try 'rm ./-a' to remove the file '-a'.
Try 'rm --help' for more information.
cp --b b
cp: 'b' 後缺少了目的地檔案
Try 'cp --help' for more information.
這是因為 Bash 基本上都是用一個或兩個連字號作為參數的開頭,例如 -h 與 –help,因此檔名的開頭如果也是連字號 - 或 – 的時候,就會被誤認為是參數
下面有兩種方法可以解決這個問題
在指令後面先加上兩個連字號「–」
rm -- -a
指令後如果先加上兩個連字號,那麼之後檔名開頭的 - 就會正常的被看作是檔名的一部分,而不是參數的引用
為檔案加上路徑
推薦
cp ./--b b
cp /tmp/--b b
只要為目標檔案加上絕對路徑或相對路徑,指令都可以正確的解讀檔名,個人是比較推薦這個用法!
參考資料:
How do I delete a file whose name begins with “-” (hyphen a.k.a. dash or minus)?