2021-05-12 14:32:11
Linux 下如何處理包含空格和特殊字元的檔名
我們經常會看到檔名和資料夾名。大多數時候檔案/資料夾的名字和內容相關並以數位和字母開頭。字母加數位的檔名最常見,應用也很廣泛,但總會需要處理一些包含特殊字元的檔名/資料夾名。
注意:我們可能有各種型別的檔案,但是為了簡單以及方便實現,在本文中我們只用文字檔案(.txt)做演示。
最常見的檔名例子:
abc.txt
avi.txt
debian.txt
...
數位檔名例子:
121.txt
3221.txt
674659.txt
...
字母數位檔名例子:
eg84235.txt
3kf43nl2.txt
2323ddw.txt
...
包含特殊字元的檔名的例子,並不常見:
#232.txt
#bkf.txt
#bjsd3469.txt
#121nkfd.txt
-2232.txt
-fbjdew.txt
-gi32kj.txt
--321.txt
--bk34.txt
...
一個顯而易見的問題是 - 在這個星球上有誰會建立和處理包含井號(#)
,分號(;)
,破折號(-)
或其他特殊字元的檔案/資料夾啊。
我和你想的一樣,這種檔名確實不常見,不過在你必須得處理這種檔名的時候你的 shell 也不應該出錯或罷工。而且技術上來說,Linux 下的一切比如資料夾、驅動器或其他所有的都被當作檔案處理。
處理名字包含破折號(-)的檔案
建立以破折號(-)
開頭的檔案,比如 -abx.txt。
$ touch -abc.txt
測試輸出
touch: invalid option --'b'
Try'touch --help'for more information.
出現上面錯誤的原因是,shell 把破折號(-)
之後的內容認作引數了,而很明顯沒有這樣的引數,所以報錯。
要解決這個問題,我們得告訴 Bash shell(是的,這裡以及本文後面的大多數例子都是基於 BASH 環境)不要將特殊字元(這裡是破折號)後的字元解釋為引數。
有兩種方法解決這個錯誤:
$ touch ---abc.txt [方法#1]
$ touch ./-abc.txt [方法#2]
你可以通過執行命令 ls 或 ls -l 列出詳細資訊來檢查通過上面兩種方式建立的檔案。
$ ls -l
total 0
-rw-r--r--1 avi avi 0Jun811:05-abc.txt
要編輯上述檔案可以這樣:
$ nano ---abc.txt
或者
$ nano ./-abc.txt
注意:你可以將 nano 替換為任何其他你喜歡的編輯器比如說 vim:
$ vim ---abc.txt
或者
$ vim ./-abc.txt
如果只是簡單地移動檔案可以這樣:
$ mv ---abc.txt -a.txt
或者
$ mv ---a.txt -abc.txt
刪除這種檔案,可以這樣:
$ rm ---abc.txt
或者
$ rm ./-abc.txt
如果一個目錄下有大量這種名字包含破折號的檔案,要一次全部刪除的話,可以這樣:
$ rm ./-*
重要:
-
上面討論的規則可以同樣應用於名字中包含任意數量以及任意位置的連線符號的檔案。就是說,-a-b-c.txt,ab-c.txt,abc-.txt,等等。
-
上面討論的規則可以同樣應用於名字中包含任意數量以及任意位置連線符號的資料夾,除了一種情況,在刪除一個資料夾的時候你得這樣使用
rm -rf
:$ rm -rf -- -abc 或者 $ rm -rf ./-abc
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-07/119589p2.htm
相關文章