PUB:20150610 How to Manipulate Filenames Having Spaces and Special Characters in Linux

@zpl1025
This commit is contained in:
wxy 2015-07-07 22:54:33 +08:00
parent 8f57687b79
commit 8da4a84b37

View File

@ -1,8 +1,8 @@
Linux 下如何处理包含空格和特殊字符的文件名
================================================================================
我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母-数字文件名最常见,应用也很广泛,但总会需要处理一些包含特殊字符的文件名/文件夹名。
我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母加数字的文件名最常见,应用也很广泛,但总会需要处理一些包含特殊字符的文件名/文件夹名。
** 注意 **:我们可能有各种类型的文件,但是为了简单以及方便实现,在本文中我们只处理文本文件(.txt
** 注意 **:我们可能有各种类型的文件,但是为了简单以及方便实现,在本文中我们只用文本文件(.txt做演示
最常见的文件名例子:
@ -38,9 +38,9 @@ Linux 下如何处理包含空格和特殊字符的文件名
--bk34.txt
...
一个显而易见的问题是 - 在这个星球上有谁会创建/处理包含井号`(#)`,分号`(;)`,破折号`(-)`或其他特殊字符的文件/文件夹啊。
一个显而易见的问题是 - 在这个星球上有谁会创建处理包含井号`(#)`,分号`(;)`,破折号`(-)`或其他特殊字符的文件/文件夹啊。
我和你想的一样,这种文件名确实不常见,不过在你必须得处理这种文件名的时候你的 shell 也不应该出错或罢工。而且技术上来说Linux 下的一切比如文件夹驱动器或其他所有的都被当作文件处理。
我和你想的一样,这种文件名确实不常见,不过在你必须得处理这种文件名的时候你的 shell 也不应该出错或罢工。而且技术上来说Linux 下的一切比如文件夹驱动器或其他所有的都被当作文件处理。
### 处理名字包含破折号(-)的文件 ###
@ -99,9 +99,9 @@ Linux 下如何处理包含空格和特殊字符的文件名
**重要:**
1. 上面讨论的规则可以同样应用于名字中包含任意数量以及位置连接符号的文件。就是说,-a-b-c.txtab-c.txtabc-.txt等等。
1. 上面讨论的规则可以同样应用于名字中包含任意数量以及任意位置连接符号的文件。就是说,-a-b-c.txtab-c.txtabc-.txt等等。
2. 上面讨论的规则可以同样应用于名字中包含任意数量以及位置连接符号的文件夹,除了一种情况,在删除一个文件夹的时候你得这样使用`rm -rf`
2. 上面讨论的规则可以同样应用于名字中包含任意数量以及任意位置连接符号的文件夹,除了一种情况,在删除一个文件夹的时候你得这样使用`rm -rf`
$ rm -rf -- -abc
或者
@ -124,7 +124,7 @@ Linux 下如何处理包含空格和特殊字符的文件名
出现上面错误的原因是BASH 将 #abc.txt 解释为评论而忽略了。所以[命令 touch][2]没有收到任何文件作为参数,所以导致这个错误。
要解决这个问题,你能需要告诉 BASH 不要将 # 解释为评论。
要解决这个问题,你能需要告诉 BASH 不要将 # 解释为评论。
$ touch ./#abc.txt
或者
@ -140,8 +140,7 @@ Linux 下如何处理包含空格和特殊字符的文件名
现在创建名字中除了开头的其他地方包含 # 的文件。
$ touch ./a#bc.txt
$ touch ./abc#.txt
$ touch ./abc#.txt
或者
$ touch 'a#bc.txt'
$ touch 'abc#.txt'
@ -197,8 +196,6 @@ Linux 下如何处理包含空格和特殊字符的文件名
或者
$ vi '#cd.txt'
----------
$ nano ./#cd.txt
或者
$ nano '#cd.txt'
@ -261,7 +258,7 @@ Linux 下如何处理包含空格和特殊字符的文件名
#### 文件名包含星号 (*) ####
名字包含星号的文件没有改变太多,你仍然可以把它当作一个普通文件。(注:星号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义
需要用单引号括起来或使用反斜杠转义。LCTT 译注:此处原文有误,已修改。
$ touch *12.txt
@ -271,9 +268,9 @@ Linux 下如何处理包含空格和特殊字符的文件名
或者
$ rm -rf *
而是用这样的命令,(注:这个命令是删除当前目录所有.txt文件。。。
而是用这样的命令,(LCTT 译注:此处原文有误,已修改
$ rm ./*.txt
$ rm ./'*.txt'
#### 文件名包含叹号 (!) ####
@ -307,9 +304,9 @@ Linux 下如何处理包含空格和特殊字符的文件名
#### 文件名包含花括号 {} ####
不需要特别注意。可以当作普通文件处理。(注:花括号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义)
用单引号括起来或使用反斜杠转义LCTT 译注:此处原文有误,已修改
$ touch {12.txt}
$ touch '{12.txt}'
#### 文件名包含尖括号 <> ####
@ -319,21 +316,21 @@ Linux 下如何处理包含空格和特殊字符的文件名
#### 文件名包含方括号 [ ] ####
名字包含方括号的文件可以当作普通文件,不用特别处理。(注:方括号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义)
用单引号括起来或使用反斜杠转义LCTT 译注:此处原文有误,已修改
$ touch [12.txt]
$ touch '[12.txt]'
#### 文件名包含下划线 (_) ####
这个非常普遍不需要特殊对待。当作普通文件随意处理。
这个非常普遍不需要特殊对待。当作普通文件随意处理。
$ touch _12.txt
#### 文件名包含等号 (=) ####
文件名包含等号不会改变任何事情,你可以当作普通文件。(注:等号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义)
用单引号括起来或使用反斜杠转义LCTT 译注:此处原文有误,已修改
$ touch =12.txt
$ touch '=12.txt'
#### 处理反斜杠 (\) ####
@ -349,9 +346,9 @@ Linux 下如何处理包含空格和特殊字符的文件名
#### 文件名包含问号 (?) ####
再一次,这个也是不需要特别处理的情况。名字包含问号的文件可以和大多数情况一样对待。(注:问号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义)
用单引号括起来或使用反斜杠转义LCTT 译注:此处原文有误,已修改
$ touch ?12.txt
$ touch '?12.txt'
#### 文件名包含点 (.) ####
@ -382,25 +379,25 @@ Linux 下如何处理包含空格和特殊字符的文件名
#### 文件名包含冒号 (:) ####
你可以在文件名中使用冒号,可以有任意多个而不用特殊对待。就像平时普通名字文件那样处理。(注:冒号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义)
用单引号括起来或使用反斜杠转义LCTT 译注:此处原文有误,已修改
$ touch :12.txt
$ touch ':12.txt'
或者
$ touch :12:.txt
$ touch ':12:.txt'
#### 文件名包含引号(单引号和双引号) ####
要在文件名里使用引号,我们需要使用交替规则。例如,如果你需要在文件名里使用单引号,那就用双引号把文件名括起来。而如果你需要在文件名里使用双引号,那就用单引号把文件名括起来。
要在文件名里使用引号,我们需要使用交替规则。例如,如果你需要在文件名里使用单引号,那就用双引号把文件名括起来。而如果你需要在文件名里使用双引号,那就用单引号把文件名括起来。LCTT 译注:或者如果单引号和双引号混杂的情况,你也可以用反斜杠转义。)
$ touch "15'.txt"
以及
$ touch '15.txt'
$ touch '15".txt'
#### 文件名包含波浪号 (~) ####
Linux 下一些像 emacs 这样的文本编辑器在编辑文件的时候会创建备份文件。这个备份文件的名字是在原文件名后面附加一个波浪号。你可以在文件名任意位置使用波浪号,例如:(注:波浪号在 shell 里有特殊意义,用作文件名最好用单引号括起来或使用反斜杠转义)
Linux 下一些像 emacs 这样的文本编辑器在编辑文件的时候会创建备份文件。这个备份文件的名字是在原文件名后面附加一个波浪号。你可以在文件名任意位置使用波浪号,例如:
$ touch ~1a.txt
或者
@ -426,10 +423,10 @@ via: http://www.tecmint.com/manage-linux-filenames-with-special-characters/
作者:[Avishek Kumar][a]
译者:[zpl1025](https://github.com/zpl1025)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/avishek/
[1]:http://www.tecmint.com/15-basic-ls-command-examples-in-linux/
[1]:https://linux.cn/article-5349-1.html
[2]:http://www.tecmint.com/8-pratical-examples-of-linux-touch-command/