如何在Linux中操作文件名有空格和特殊字符

我們經(jīng)常遇到文件和文件夾名稱斯够。 在大多數(shù)情況下,文件/文件夾名稱與文件/文件夾的內(nèi)容相關喧锦,并以數(shù)字和字符開頭读规。 Alpha數(shù)字文件名是相當普遍和非常廣泛使用,但是這不是這樣的情況燃少,當我們必須處理文件/文件夾名稱中有特殊字符束亏。

注 :我們可以有任何類型的文件,但為了簡單和易于實現(xiàn)阵具,我們將處理文本文件(.txt)碍遍,整個文章。

最常見的文件名示例如下:

abc.txt
avi.txt
debian.txt
...

數(shù)字文件名的示例有:

121.txt
3221.txt
674659.txt
...

字母數(shù)字文件名的示例是:

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中被視為文件越庇。

處理名稱中有破折號( - )的文件

創(chuàng)建以破折號開頭的文件(-)說-abx.txt。

$ touch -abc.txt

示例輸出

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

原因上面的錯誤奉狈,即殼破折號后解釋任何東西(-)作為選項卤唉,顯然沒有這樣的選項,因此是錯誤仁期。

要解決這樣的錯誤桑驱,我們必須要告訴的Bash shell(燁這一點竭恬,大多數(shù)的文章中的其他例子是BASH)不解釋特殊字符(這里劃線)后,任何東西熬的,因為選項痊硕。

有兩種方法可以解決此錯誤:

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

您可以通過運行命令驗證因而上述兩種方式創(chuàng)建的文件:ls或ls -l命令的長列表。

$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun  8 11:05 -abc.txt

要編輯上述文件押框,您可以:

$ nano -- -abc.txt 
or 
$ nano ./-abc.txt 

注意 :您可以使用自己選擇的任何其他編輯器代替納米說VIM為:

$ vim -- -abc.txt 
or 
$ vim ./-abc.txt 

類似移動這樣的文件岔绸,你必須做:

$ mv -- -abc.txt -a.txt
or
$ mv -- -a.txt -abc.txt

并刪除此文件,您必須做:

$ rm -- -abc.txt
or
$ rm ./-abc.txt 

如果文件夾中有很多文件橡伞,其名稱包含破折號盒揉,并且要立即刪除所有文件,請執(zhí)行以下操作:

$ rm ./-*

重要注意事項:

1.如以上所討論的相同的規(guī)則遵循在文件和它們發(fā)生的名稱的任何數(shù)目連字符的兑徘。 即刚盈,-abc.txt,AB-c.txt挂脑,ABC-txt文件 藕漱,等等。

2.如上面討論的相同的規(guī)則如下為具有任何數(shù)量連字符和它們發(fā)生的文件夾的名稱崭闲,除了了一個事實谴分,刪除的文件夾必須使用' 室射頻 '為:

$ rm -rf -- -abc
or
$ rm -rf ./-abc

處理名稱中具有HASH(#)的文件

符號#在BASH一個非常不同的意義。 一個后任何#被解釋為注釋镀脂,因此,通過BASH忽視忘伞。

使用示例了解它:

創(chuàng)建一個文件#的abc.txt薄翅。

$ touch #abc.txt

示例輸出

touch: missing file operand
Try 'touch --help' for more information.

原因上面的錯誤,這是bash解釋#的abc.txt評論氓奈,因此忽略翘魄。 因此, touch命令已經(jīng)過去了舀奶,沒有任何文件操作數(shù)暑竟,因此是錯誤。

要解決這樣的錯誤育勺,你可能會問BASH不解釋#作為注釋但荤。

$ touch ./#abc.txt
or
$ touch '#abc.txt'

并驗證剛創(chuàng)建的文件:

$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:14 #abc.txt

現(xiàn)在創(chuàng)建一個文件名稱包含#的任何地方,除了在乞討涧至。

$ touch ./a#bc.txt
$ touch ./abc#.txt
or
$ touch 'a#bc.txt'
$ touch 'abc#.txt'

運行“l(fā)s -l命令 ”來驗證:

$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:16 a#bc.txt
-rw-r--r-- 1 avi avi 0 Jun  8 12:16 abc#.txt

當您創(chuàng)建兩個文件會發(fā)生什么(比如A和#bc)一次:

$ touch a.txt #bc.txt

驗證剛創(chuàng)建的文件:

$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:18 a.txt

顯而易見它僅創(chuàng)建的文件“A”和文件“#bc'已被忽略上述的例子腹躁。 為了成功地執(zhí)行上述情況,我們可以做到南蓬,

$ touch a.txt ./#bc.txt
or
$ touch a.txt '#bc.txt'

并驗證為:

$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:20 a.txt
-rw-r--r-- 1 avi avi 0 Jun  8 12:20 #bc.txt

您可以將文件移動為:

$ mv ./#bc.txt ./#cd.txt
or
$ mv '#bc.txt' '#cd.txt'

復制為:

$ cp ./#cd.txt ./#de.txt
or
$ cp '#cd.txt' '#de.txt'

您可以使用您選擇的編輯器來編輯它:

$ vi ./#cd.txt
or
$ vi '#cd.txt'
$ nano ./#cd.txt
or
$ nano '#cd.txt'

并將其刪除為:

$ rm ./#bc.txt 
or
$ rm '#bc.txt'

要刪除所有在文件名中的散列(#)的文件纺非,你可以使用:

# rm ./#*

處理名稱中具有分號(;)的文件

如果你不知道哑了,分號在BASH和其他shell中作為命令分隔符。 分號允許您一次執(zhí)行幾個命令烧颖,并充當分隔符弱左。 你有沒有處理任何具有分號的文件名? 如果不是在這里炕淮,你會拆火。

創(chuàng)建一個具有分號的文件。

$ touch ;abc.txt

示例輸出

touch: missing file operand
Try 'touch --help' for more information.
bash: abc.txt: command not found

原因上面的錯誤鳖悠,當你運行上面的命令BASH Touch解釋為命令榜掌,但找不到分號之前的任何文件操作,因此它報告錯誤乘综。 它還報告另一個錯誤是沒有發(fā)現(xiàn)' 的abc.txt“命令憎账,只是因為分號后BASH期待另一個命令和' 的abc.txt”,不是命令卡辰。

要解決這種錯誤胞皱,告訴BASH不要將分號解釋為命令分隔符,如下所示:

$ touch ./';abc.txt'
or
$ touch ';abc.txt'

注意 :我們已經(jīng)附帶單引號的文件名'' 它告訴BASH的;是文件名稱的一部分九妈,而不是命令分隔符反砌。

對其名稱中具有分號的文件和文件夾的其余操作(即復制,移動萌朱,刪除)可以通過在單引號中包含名稱而直接執(zhí)行宴树。

處理文件/文件夾名中的其他特殊字符

加號(+)在文件名中

不要求任何額外的,只是做正常的方式晶疼,作為簡單的文件名如下所示酒贬。

$ touch +12.txt 

美元符號($)在文件名中

您必須在單引號中包含文件名,如在分號的情況下翠霍。 其余的事情是直接..

$ touch '$12.txt'

文件名中的百分比(%)

你不需要做任何不同的事情锭吨,把它當作正常文件。

$ touch %12.txt

星號(*)在文件名中

在文件名中使用星號不會更改任何內(nèi)容寒匙,您可以繼續(xù)使用它作為正常文件零如。

$ touch *12.txt

注意 :當你刪除開頭的文件* ,切勿使用下面的命令來刪除這些文件锄弱。

$ rm *
or
$ rm -rf *

相反使用考蕾,

$ rm ./*.txt

感嘆號(!)在文件名中

只是在單引號中包含文件名棵癣,其余的東西是相同的辕翰。

$ touch '!12.txt'

在文件名中的符號(@)

沒有什么額外的,將At Sign的文件名視為非文件狈谊。

$ touch '@12.txt'

^在文件名中

無需額外注意喜命。 使用具有文件^在文件名作為正常的文件沟沙。

$ touch ^12.txt

文件名中的&符(&)

文件名應該用單引號括起來,你準備好了壁榕。

$ touch '&12.txt'

括號()在文件名中

如果文件名有括號矛紫,則需要用單引號括起文件名。

$ touch '(12.txt)'

大括號{}在文件名中

無需額外護理牌里。 只是把它當作另一個文件颊咬。

$ touch {12.txt}

Chevrons <>文件名

具有Chevrons的文件名必須用單引號括起來。

$ touch ''

文件名中的方括號[]

將帶有方括號的文件名作為正常文件處理牡辽,您不需要特別小心喳篇。

$ touch [12.txt]

文件名中的得分(_)下

它們是非常常見的,不需要任何額外的态辛。 只是做你會做一個正常的文件麸澜。

$ touch _12.txt

文件名中的等于(=)

有一個等于符號不改變?nèi)魏螙|西,你可以使用它作為正常文件奏黑。

$ touch =12.txt

處理反斜線(\)

反斜杠告訴shell忽略下一個字符炊邦。 您必須在單引號中包含文件名,如在分號的情況下熟史。 其余的事情是直接馁害。

$ touch '\12.txt'

前傾斜的特殊情況

你不能創(chuàng)建一個文件名,其中包括正斜杠(/)直到你的文件系統(tǒng)錯誤蹂匹。 沒有辦法逃脫前斜線碘菜。

所以,如果你可以創(chuàng)建一個文件限寞,如“/12.txt'或'B / c.txt'炉媒,那么你的文件系統(tǒng)有錯誤或你有Unicode支持,它可以讓你創(chuàng)建一個斜杠的文件昆烁。 在這種情況下,正斜杠不是真正的正斜杠缎岗,而是一個看起來像正斜杠的Unicode字符静尼。

問號(?)在文件名中

再次传泊,一個例子鼠渺,你不需要做任何特別的嘗試。 具有問號的文件名可以以最通用的方式處理眷细。

$ touch ?12.txt

文件名中的點標記(拦盹。)

以點開頭的文件(.)是在Linux中非常特殊,被稱為點文件溪椎。 它們通常是隱藏文件配置或系統(tǒng)文件普舆。 你必須使用開關“-a”或“-A”用ls命令來查看這些文件恬口。

創(chuàng)建,編輯沼侣,重命名和刪除這些文件是直接的祖能。

$ touch .12.txt

注 :在Linux中,你可能有多達點(.)如您在文件名需要蛾洛。 與文件名中的其他系統(tǒng)點不同养铸,并不意味著分離名稱和擴展名。 您可以創(chuàng)建具有多個點的文件:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

并檢查為:

$ ls -l
total 0
-rw-r--r-- 1 avi avi 0 Jun  8 14:32 1.2.3.4.5.6.7.8.9.10.txt

逗號(轧膘,)在文件名中

您可以在文件名中使用逗號钞螟,盡可能多,您不需要任何額外的谎碍。 只是做正常的方式鳞滨,作為簡單的文件名。

$ touch ,12.txt
or
$ touch ,12,.txt

冒號(:)在文件名

你可以在文件名中有冒號椿浓,盡可能多太援,你不需要任何額外的東西。 只是做正常的方式扳碍,作為簡單的文件名提岔。

$ touch :12.txt
or
$ touch :12:.txt

在文件名中包含引號(單引號和雙引號)

要在文件名中加引號,我們必須使用交換規(guī)則笋敞。 也就是說碱蒙,如果您需要在文件名中包含單引號,請用雙引號將文件名括起來夯巷,如果您需要在文件名中有雙引號赛惩,請用單引號括起來。

$ touch "15'.txt"
and
$ touch '15”.txt'

文件名中的波浪號(?)

在Linux中一些編輯器Emacs等創(chuàng)建該文件的備份文件進行編輯趁餐。 備份文件具有原始文件的名稱以及文件名末尾的波浪號喷兼。 您可以有一個文件,其名稱包括波浪號后雷,在任何位置簡單為:

$ touch ~1a.txt
or
$touch 2b~.txt

文件名中的白色空間

創(chuàng)建一個文件名季惯,其中有字符/字之間的空間,說:“ 大家好臀突,我的名字是avishek.txt”勉抓。

使用空格來保存文件名并不是一個好主意,如果您必須使用可讀的名稱候学,則應使用下劃線或破折號藕筋。 然而,如果你必須創(chuàng)建這樣的文件梳码,你必須使用反斜杠隐圾,忽略它的下一個字符伍掀。 要創(chuàng)建上述文件,我們必須這樣做翎承。

$ touch hi\ my\ name\ is\ avishek.txt
hi my name is avishek.txt

如何在Linux中操作文件名有空格和特殊字符

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硕盹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叨咖,更是在濱河造成了極大的恐慌瘩例,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甸各,死亡現(xiàn)場離奇詭異垛贤,居然都是意外死亡,警方通過查閱死者的電腦和手機趣倾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門聘惦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人儒恋,你說我怎么就攤上這事善绎。” “怎么了诫尽?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵禀酱,是天一觀的道長。 經(jīng)常有香客問我牧嫉,道長剂跟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任酣藻,我火速辦了婚禮曹洽,結果婚禮上,老公的妹妹穿的比我還像新娘辽剧。我一直安慰自己送淆,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布怕轿。 她就那樣靜靜地躺著坊夫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撤卢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天梧兼,我揣著相機與錄音放吩,去河邊找鬼。 笑死羽杰,一個胖子當著我的面吹牛渡紫,可吹牛的內(nèi)容都是我干的到推。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼惕澎,長吁一口氣:“原來是場噩夢啊……” “哼莉测!你這毒婦竟也來了?” 一聲冷哼從身側響起唧喉,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捣卤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后八孝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體董朝,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年干跛,在試婚紗的時候發(fā)現(xiàn)自己被綠了子姜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡楼入,死狀恐怖哥捕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉熊,我是刑警寧澤遥赚,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站记舆,受9級特大地震影響鸽捻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜泽腮,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一御蒲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诊赊,春花似錦厚满、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鲸郊,卻和暖如春丰榴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秆撮。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工四濒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓盗蟆,卻偏偏與公主長得像戈二,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喳资,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容