我們經(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