1. 程式人生 > >Linux 下如何處理包含空格和特殊字元的檔名

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

注意:我們可能有各種型別的檔案,但是為了簡單以及方便實現,在本文中我們只用文字檔案(.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

處理名字包含井號(#)的檔案

符號#在 BASH 裡有非常特別的含義。#之後的一切都會被認為是評論,因此會被 BASH 忽略。

通過例子來加深理解:

建立一個名字是 #abc.txt 的檔案:

  1. $ touch #abc.txt

測試輸出

  1. touch: missing file operand

  2. Try'touch --help'for more information.

出現上面錯誤的原因是,BASH 將 #abc.txt 解釋為評論而忽略了。所以命令 touch沒有收到任何檔案作為引數,所以導致這個錯誤。

要解決這個問題,你可能需要告訴 BASH 不要將 # 解釋為評論。

  1. $ touch ./#abc.txt

  2. 或者

  3. $ touch '#abc.txt'

檢查剛建立的檔案:

  1. $ ls -l

  2. total 0

  3. -rw-r--r--1 avi avi 0Jun812:14#abc.txt

現在建立名字中除了開頭的其他地方包含 # 的檔案。

  1. $ touch ./a#bc.txt

  2. $ touch ./abc#.txt

  3. 或者

  4. $ touch 'a#bc.txt'

  5. $ touch 'abc#.txt'

執行 ‘ls -l‘ 來檢查:

  1. $ ls -l

  2. total 0

  3. -rw-r--r--1 avi avi 0Jun812:16 a#bc.txt

  4. -rw-r--r--1 avi avi 0Jun812:16 abc#.txt

如果同時建立兩個檔案(比如 a 和 #bc)會怎麼樣:

  1. 相關推薦

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

    注意:我們可能有各種型別的檔案,但是為了簡單以及方便實現,在本文中我們只用文字檔案(.txt)做演示。 最常見的檔名例子: abc.txtavi.txtdebian.txt... 數字檔名例子: 121.txt3221.txt674659.txt.

    面試題:一個字串包含英文特殊字元特殊字元不變,英文順序反過來,比如string str="[email 

    public class Reverse { public static void main(String[] args) { String str = "[email protected]!tk"; char[] chars = str.toCh

    Android EditText禁止輸入空格特殊字元

    有時候我們需要限制EditText輸入的字元型別,如空格,特殊字元等,這時候我們可以使用系統提供的輸入過濾器——InputFilter。具體實現如下: /** * 禁止EditText輸入空

    Java環境變數配置問題:路徑包含空格特殊字元(_,~等)

    本機環境變數的設定:java_home = C:\Program Files\Java\jdk1.5.0_09 *.bat中的命令格式: %java_home%\bin\java 或者 C:\Program Files\Java\jdk1.5.0_09\bin\java 批處理檔案中有以上這一行語句,要呼叫

    面試題:一個字串包含英文特殊字元特殊字元不變,英文順序反過來,比如string str="[email prot

    public class Reverse { public static void main(String[] args) { String str = "[email protected]!tk"; char[] char

    bash處理包含空格檔名

    今天在處理檔案時遇到個問題,當檔名包含空格時,for迴圈就出問題了。 例如,我在當前資料夾下建立3個檔名包含空格的檔案:keakons-MacBook-Pro:test keakon$ touch "test 1" keakons-MacBook-Pro:test keak

    輸入一個字串,分別統計出包含的英文字母、數字、空格其他字元的個數

    /** * */ package testString; import java.util.Scanner; /** *@author: Administrator *@date: 2016-12-26 下午09:23:41 */ public class

    oracle & ' 特殊字元處理 ( like 'GAC/&_%' escape '&'; 這裡面的 / 居然將& 轉義了 為什麼?)

    今天在匯入一批資料到Oracle時,碰到了一個問題:Toad提示(plsql 也一樣)要給一個自定義變數AMP賦值,一開始我很納悶,資料是一系列的Insert語句,怎麼會有自定義變數呢?後來搜尋了一下關鍵字AMP發現,原來是因為在插入資料中有一個欄位的內容如下: Orac

    linuxjdk的安裝配置

    rac -s watermark img 使用 etc 文件拷貝 安裝 com 一、首先依據自己的系統位數在網上下載對應的jdk安裝包 下載地址例如以下:http://www.oracle.com/technetwork/java/javase/downloads/jd

    奪命雷公狗---linux NO:27 linux的密碼管理用戶切換以及sudo的使用

    意思 發現 which window 明顯 能開 操作 賬戶 修改 我們在windows下用戶名是可以設置空密碼登錄的,但是在linux 裏面必須要設置一個密碼才可以登錄,否則會失敗的。。。 在linux 下設置密碼可以使用 passwd 這個命令來進行設置。。。 但是

    LinuxMySQL的備份恢復

    mysql備份 再也不用擔心數據丟失了 MySQL備份的原因 1. 災難恢復 2. 審計 3. 測試1234512345mysql的備份類型 1. 根據服務器的在線狀態: 熱備:服務器處於運行狀態 冷備:服務器出去停止狀態 溫備:服務器處於半離線狀態,只能讀,但是不能

    Linux安裝Python3.x第三方庫

    方便 tls libpcap 輸入 zlib cert ase $path pip安裝 如果本機安裝了python2,盡量不要管他,使用python3運行python腳本就好,因為可能有程序依賴目前的python2環境, 比如yum!!!!! 不要動現有的python2環境

    Linuxvsftpd的配置使用

    vsftpd設置通過ftp向linux主機傳輸文件十分方便,但是在使用之前也需要對主機進行相關設置。首先是對vsftpd進行配置,詳細的信息可以見這個博客:https://www.huzs.net/?p=1213#server_vsftpd.conf 但是當配置好vsftpd後,仍然無法用ftp鏈接到linu

    linux的靜態庫動態庫

    列表 可執行文件 運行時 打包 文件的 ade 命令 div library 一、linux下的靜態庫 靜態庫中的被調用的函數的代碼會在編譯時一起被復制到可執行文件中去的!!可執行文件在運行不需要靜態庫的存在! 二、linux下動態庫的構建和使用 1、動態庫的構建

    LinuxMySQL的安裝啟動(轉載)

    enable linu char cal mysql用戶 客戶端程序 ast 初學 unix 原文鏈接:http://www.linuxidc.com/Linux/2016-07/133234.htm 一、MySQL各類安裝方法的比較 在Linux系統下,MySQL有3種主

    Linux安裝Python3.6第三方庫

    python安裝一、安裝Python-3.6.2.tgz安裝依賴環境最小化安裝Redhat6.4環境下yum -y install gcc make zlib-devel bzip2-devel ncurses-devel readline-devel(yum -y install gcc mak

    linux gogs的安裝web鉤子

    目錄 就是 文件中 mit inux 倉庫 創建 開始 下載安裝 linux系統下 gogs下載安裝以及web鉤子的使用 (1)下載gogs 官方網址:https://dl.gogs.io/ 選擇合適的版本,解壓後就可以使用了 啟動gogs的命令: ./gos web

    linux的權限、特殊權限、acl

    權限 suid sgid acl 首先,我們都知道Linux是一個多用戶操作系統,那麽問題就來了,假設我有一個文件叫file1,這個文件是用戶user1的,user1有一個項目組g1,他希望他項目組裏的同事可以查看修改這個文件,但是不希望其他人看到文件中的內容當然也不能編輯。那怎麽解決這個問題

    LinuxRedis的安裝部署(轉)

    分享圖片 rpo service bare moni res linux文件 情況下 遠程管理 一、Redis介紹 Redis是當前比較熱門的NOSQL系統之一,它是一個key-value存儲系統。和Memcache類似,但很大程度補償了Memcache的不足,它支

    LInux常用開發環境軟件記錄

    java 虛擬機 調整 備份 chrome插件 cover 資料 找不到 利用 0. 前言 在升級Ubuntu18.04時經歷了慘無人道的桌面丟失問題,備份了資料之後重裝解決。但是安裝過的軟件和配好的環境都丟了,只能重來。 重裝後發現重重疊疊的大額頭太難看了,嚴重降低屏幕利