首頁 > 軟體

Linux 下如何處理包含空格和特殊字元的檔名

2020-06-16 17:57:52

我們經常會看到檔名和資料夾名。大多數時候檔案/資料夾的名字和內容相關並以數位和字母開頭。字母加數位的檔名最常見,應用也很廣泛,但總會需要處理一些包含特殊字元的檔名/資料夾名。

注意:我們可能有各種型別的檔案,但是為了簡單以及方便實現,在本文中我們只用文字檔案(.txt)做演示。

最常見的檔名例子:

  1. abc.txt
  2. avi.txt
  3. debian.txt
  4. ...

數位檔名例子:

  1. 121.txt
  2. 3221.txt
  3. 674659.txt
  4. ...

字母數位檔名例子:

  1. eg84235.txt
  2. 3kf43nl2.txt
  3. 2323ddw.txt
  4. ...

包含特殊字元的檔名的例子,並不常見:

  1. #232.txt
  2. #bkf.txt
  3. #bjsd3469.txt
  4. #121nkfd.txt
  5. -2232.txt
  6. -fbjdew.txt
  7. -gi32kj.txt
  8. --321.txt
  9. --bk34.txt
  10. ...

一個顯而易見的問題是 - 在這個星球上有誰會建立和處理包含井號(#),分號(;),破折號(-)或其他特殊字元的檔案/資料夾啊。

我和你想的一樣,這種檔名確實不常見,不過在你必須得處理這種檔名的時候你的 shell 也不應該出錯或罷工。而且技術上來說,Linux 下的一切比如資料夾、驅動器或其他所有的都被當作檔案處理。

處理名字包含破折號(-)的檔案

建立以破折號(-)開頭的檔案,比如 -abx.txt。

  1. $ touch -abc.txt

測試輸出

  1. touch: invalid option --'b'
  2. Try'touch --help'for more information.

出現上面錯誤的原因是,shell 把破折號(-)之後的內容認作引數了,而很明顯沒有這樣的引數,所以報錯。

要解決這個問題,我們得告訴 Bash shell(是的,這裡以及本文後面的大多數例子都是基於 BASH 環境)不要將特殊字元(這裡是破折號)後的字元解釋為引數。

有兩種方法解決這個錯誤:

  1. $ touch ---abc.txt [方法#1]
  2. $ touch ./-abc.txt [方法#2]

你可以通過執行命令 ls 或 ls -l 列出詳細資訊來檢查通過上面兩種方式建立的檔案。

  1. $ ls -l
  2. total 0
  3. -rw-r--r--1 avi avi 0Jun811:05-abc.txt

要編輯上述檔案可以這樣:

  1. $ nano ---abc.txt
  2. 或者
  3. $ nano ./-abc.txt

注意:你可以將 nano 替換為任何其他你喜歡的編輯器比如說 vim:

  1. $ vim ---abc.txt
  2. 或者
  3. $ vim ./-abc.txt

如果只是簡單地移動檔案可以這樣:

  1. $ mv ---abc.txt -a.txt
  2. 或者
  3. $ mv ---a.txt -abc.txt

刪除這種檔案,可以這樣:

  1. $ rm ---abc.txt
  2. 或者
  3. $ rm ./-abc.txt

如果一個目錄下有大量這種名字包含破折號的檔案,要一次全部刪除的話,可以這樣:

  1. $ rm ./-*

重要:

  1. 上面討論的規則可以同樣應用於名字中包含任意數量以及任意位置的連線符號的檔案。就是說,-a-b-c.txt,ab-c.txt,abc-.txt,等等。

  2. 上面討論的規則可以同樣應用於名字中包含任意數量以及任意位置連線符號的資料夾,除了一種情況,在刪除一個資料夾的時候你得這樣使用rm -rf

    $ rm -rf -- -abc 或者 $ rm -rf ./-abc

 

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2015-07/119589p2.htm


IT145.com E-mail:sddin#qq.com