文档章节

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

gzwawj
 gzwawj
发布于 2019/03/14 15:48
字数 2974
阅读 28
收藏 0

我们经常遇到文件和文件夹名称。 在大多数情况下,文件/文件夹名称与文件/文件夹的内容相关,并以数字和字符开头。 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

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

© 著作权归作者所有

gzwawj
粉丝 0
博文 10
码字总数 10711
作品 0
石家庄
私信 提问
加载中

评论(0)

【WP插件开发】找人做个WordPress附件上传插件

问题来源:用WordPress做了一个私站,有时候需要附上给大家下载的附件【注意是下载附件,而不是文章自带的图片附件什么的】,附件主要为rar docx xlsx pdf等文件格式,以后附件可能比较多,所...

老牛爱折腾
2016/10/03
231
0
expand 与 unexpand 命令实例教程

本指南通过实际的例子解释两个 Linux 命令,即 和 。对于好奇的人, 和 命令用于将文件中的 字符替换为空格,反之亦然。在 MS-DOS 中也有一个名为 的命令,它用于解压压缩文件。但 Linux 的 ...

作者: Sk
2019/06/16
0
0
WordPress附件上传到指定ftp服务器的插件

应用场景: 我的网站有时候要给网友免费提供文件下载,我是单独用个vps当做附件服务器,解析了个子域名到这个vps,用着没问题,就是不方便,原因如下:我在WordPress发布页面新建了一个专门用...

老牛爱折腾
2017/02/12
322
0
Linux 下如何处理包含空格和特殊字符的文件名

我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母加数字的文件名最常见,应用也很广泛,但总会需要处理一些包含特殊字符的文件名/文件夹名。...

jims
2016/10/16
329
1
Shell中的特殊字符

介绍[54,17]   bash本身并不支持正则表达式regex, 而shell下的有些工具是支持解释regex的,使用regex的是shell命令和工具, 如grep,sed,awk等.但shell 支持通配符,区别于regex,通配是把一个包...

adelphos
2014/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis学习笔记——数据类型之有序集合类型

介绍 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数。 集合中每个元素都是不同的,分数可以相同。 有序集合和列表的异同 相同点 二者都是有序的。 二者都可以获得某一个...

PS板砖
23分钟前
23
0
比较两个MySQL数据库[关闭]

我目前正在使用MySQL数据库开发应用程序。 数据库结构仍在不断变化中,并且随着开发的进展而变化(我更改了本地副本,仅将其保留在测试服务器上)。 有没有一种方法可以比较数据库的两个实例...

javail
36分钟前
28
0
Joomla搜索生态系统介绍

您在网站上花费多长时间?对我来说,它永远不会超过2分钟。研究表明,您从Baidu搜索获得的自然访问者平均每个网站花费53秒。而您的直接访客通常花费1分钟50秒。当然,它可能会根据您的受欢迎...

六艺网络专注于Joomla
39分钟前
35
0
linux基础第五周

1、查找/etc目录下大于1M且类型为普通文件的所有文件 find /etc -size +1M -type f 2、打包/etc目录下所有conf结尾的文件,压缩包名称为当天时间,并拷贝到/usr/local/src目录备份 tar Jcvf...

大雨雨雨雨雨
46分钟前
29
0
在C#中使用Finalize / Dispose方法

C#2008 我已经为此工作了一段时间,但我仍然对在代码中使用finalize和dispose方法感到困惑。 我的问题如下: 我知道在处理非托管资源时我们只需要一个终结器即可。 但是,如果存在调用非托管...

技术盛宴
51分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部