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

我们经常遇到文件和文件夹名称。 在大多数情况下,文件/文件夹名称与文件/文件夹的内容相关,并以数字和字符开头。 Alpha数字文件名是相当普遍和非常广泛使用,但是这不是这样的情况,当我们必须处理文件/文件夹名称中有特殊字符。

:我们可以有任何类型的文件,但为了简单和易于实现,我们将处理文本文件(.txt),整个文章。

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

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

数字文件名的示例有:

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

字母数字文件名的示例是:

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中被视为文件。

处理名称中有破折号( - )的文件

创建以破折号开头的文件(-)-abx.txt。

$ touch -abc.txt
示例输出
touch: invalid option -- 'b'
Try 'touch --help' for more information.

原因上面的错误,即壳破折号后解释任何东西(-)作为选项,显然没有这样的选项,因此是错误。

要解决这样的错误,我们必须要告诉的Bash shell(烨这一点,大多数的文章中的其他例子是BASH)不解释特殊字符(这里划线)后,任何东西,因为选项。

有两种方法可以解决此错误:

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

您可以通过运行命令验证因而上述两种方式创建的文件: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 

如果文件夹中有很多文件,其名称包含破折号,并且要立即删除所有文件,请执行以下操作:

$ rm ./-*
重要注意事项:

1.如以上所讨论的相同的规则遵循在文件和它们发生的名称的任何数目连字符的。 ,-abc.txt,AB-c.txt,ABC-txt文件 ,等等。

2.如上面讨论的相同的规则如下为具有任何数量连字符和它们发生的文件夹的名称,除了了一个事实,删除的文件夹必须使用' 室射频 '为:

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

处理名称中具有HASH(#)的文件

符号#在BASH一个非常不同的意义。 一个后任何#被解释为注释,因此,通过BASH忽视。

使用示例了解它:

创建一个文件#的abc.txt。

$ touch #abc.txt
示例输出
touch: missing file operand
Try 'touch --help' for more information.

原因上面的错误,这是bash解释#的abc.txt评论,因此忽略。 因此, touch命令已经过去了,没有任何文件操作数,因此是错误。

要解决这样的错误,你可能会问BASH不解释作为注释。

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

并验证刚创建的文件:

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

现在创建一个文件名称包含#的任何地方,除了在乞讨。

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

运行“ls -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

当您创建两个文件会发生什么(比如A#bc)一次:

$ touch a.txt #bc.txt

验证刚创建的文件:

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

显而易见它仅创建的文件“A”和文件“#bc'已被忽略上述的例子。 为了成功地执行上述情况,我们可以做到,

$ 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中作为命令分隔符。 分号允许您一次执行几个命令,并充当分隔符。 你有没有处理任何具有分号的文件名? 如果不是在这里,你会。

创建一个具有分号的文件。

$ touch ;abc.txt
示例输出
touch: missing file operand
Try 'touch --help' for more information.
bash: abc.txt: command not found

原因上面的错误,当你运行上面的命令BASH Touch解释为命令,但找不到分号之前的任何文件操作,因此它报告错误。 它还报告另一个错误是没有发现' 的abc.txt“命令,只是因为分号后BASH期待另一个命令和' 的abc.txt”,不是命令。

要解决这种错误,告诉BASH不要将分号解释为命令分隔符,如下所示:

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

注意 :我们已经附带单引号的文件名'' 它告诉BASH的;是文件名称的一部分,而不是命令分隔符。

对其名称中具有分号的文件和文件夹的其余操作(即复制,移动,删除)可以通过在单引号中包含名称而直接执行。

处理文件/文件夹名中的其他特殊字符

加号(+)在文件名中

不要求任何额外的,只是做正常的方式,作为简单的文件名如下所示。

$ touch +12.txt 

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

您必须在单引号中包含文件名,如在分号的情况下。 其余的事情是直接..

$ touch '$12.txt'

文件名中的百分比(%)

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

$ touch %12.txt

星号(*)在文件名中

在文件名中使用星号不会更改任何内容,您可以继续使用它作为正常文件。

$ 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

文件名中的等于(=)

有一个等于符号不改变任何东西,你可以使用它作为正常文件。

$ touch =12.txt

处理反斜线(\)

反斜杠告诉shell忽略下一个字符。 您必须在单引号中包含文件名,如在分号的情况下。 其余的事情是直接。

$ touch '\12.txt'

前倾斜的特殊情况

你不能创建一个文件名,其中包括正斜杠(/)直到你的文件系统错误。 没有办法逃脱前斜线。

所以,如果你可以创建一个文件,如“/12.txt''B / c.txt',那么你的文件系统有错误或你有Unicode支持,它可以让你创建一个斜杠的文件。 在这种情况下,正斜杠不是真正的正斜杠,而是一个看起来像正斜杠的Unicode字符。

问号(?)在文件名中

再次,一个例子,你不需要做任何特别的尝试。 具有问号的文件名可以以最通用的方式处理。

$ touch ?12.txt

文件名中的点标记(。)

以点开头的文件(.)是在Linux中非常特殊,被称为点文件。 它们通常是隐藏文件配置或系统文件。 你必须使用开关“-a”“-A”ls命令来查看这些文件。

创建,编辑,重命名和删除这些文件是直接的。

$ touch .12.txt

:在Linux中,你可能有多达点(.)如您在文件名需要。 与文件名中的其他系统点不同,并不意味着分离名称和扩展名。 您可以创建具有多个点的文件:

$ 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

在文件名中包含引号(单引号和双引号)

要在文件名中加引号,我们必须使用交换规则。 也就是说,如果您需要在文件名中包含单引号,请用双引号将文件名括起来,如果您需要在文件名中有双引号,请用单引号括起来。

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

文件名中的波浪号(〜)

在Linux中一些编辑器Emacs等创建该文件的备份文件进行编辑。 备份文件具有原始文件的名称以及文件名末尾的波浪号。 您可以有一个文件,其名称包括波浪号,在任何位置简单为:

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

文件名中的白色空间

创建一个文件名,其中有字符/字之间的空间,说:“ 大家好,我的名字是avishek.txt”。

使用空格来保存文件名并不是一个好主意,如果您必须使用可读的名称,则应使用下划线或破折号。 然而,如果你必须创建这样的文件,你必须使用反斜杠,忽略它的下一个字符。 要创建上述文件,我们必须这样做。

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

我试着涵盖你可能遇到的所有情况。 大多数以上的实现是明确的为BASH Shell和可能不工作在其他shell。

如果你觉得我错过了一些东西(这是非常常见的和人性的),你可以在下面的评论中包括你的建议。 保持连接,保持评论。 保持调谐和连接! 喜欢和分享我们,并帮助我们传播!

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏