Linux命令使用时路径存在空格、特殊符号(如-、@等等)如何处理呢?

再如可以转义的字符包括:"?"(问号), "*"(星号), " "(空格), "$"(货币符), "&"(逻辑符), "( )"(英文括号)等等。

很早之前应该是遇到过这种问题,也处理过该问题,但是不记得怎么处理的了,也没找到自己以前处理过的博客,那就简记下吧。

(1)Linux路径约定

在Linux下可以使用长文件名和目录名,可以给它们取任何名称,但是必须遵守以下规则:

☆除了/外,所有的字符都可以;

☆有些字符最好不用,如空格符、制表符、退格符和以下字符:? @ # $ & ( ) \ | ' ' " " 等(其中,/ 号已经在第一条被严格禁止了,()是英文括号);

☆避免使用+-或.作为普通文件名的第一个字符(在Linux下以.开头的文件是属于隐藏文件);

☆和Windows文件命名不一样的是,在Linux下文件名大小写敏感。

☆另外,尽量避免使用中文和中文符号;

(2)路径处理遇到的问题及解决办法

比如说路径:

/home/ubuntu/zgd/firmwareExtracted/Foscam/_04914e2d4148d741fbfc4ff073a24e38bf675452.zip.extrac0--for 1.14.1.14 version only.zip.extracted/_FI9805W_app_ver1.14.0.17.bin.extracted/_0.extracttracted/app/bin

那么想进入此路径目录下,执行

cd /home/ubuntu/zgd/firmwareExtracted/Foscam/_04914e2d4148d741fbfc4ff073a24e38bf675452.zip.extrac0--for 1.14.1.14 version only.zip.extracted/_FI9805W_app_ver1.14.0.17.bin.extracted/_0.extracttracted/app/bin

会报错无此文件或文件夹,如下图所示:

6bfb30936daee1e81a8d34f436f3b693.png

解决办法是路径加上一个双引号。然后就ok了。如下面所示:

方法一:(推荐使用,方法简单可行)

cd “/home/ubuntu/zgd/firmwareExtracted/Foscam/_04914e2d4148d741fbfc4ff073a24e38bf675452.zip.extrac0--for 1.14.1.14 version only.zip.extracted/_FI9805W_app_ver1.14.0.17.bin.extracted/_0.extracttracted/app/bin”

0631db7929cc3442124202c23f341d85.png

方法二:(貌似不能行)

看到有的博客说在路径前面加上--就能解决问题,然后我尝试了一下,发现仍然会出现这种报错问题。

99c4ea62d49e8a9ef7410488941a1cdb.png

方法三:(可行,但有些麻烦)

将每一个存在特殊符号的位置,都使用转义符“\”进行转义。这种方法也是ok的,只是存在一个问题是,你不知道你的列表里是否包含了所有不能处理的特殊字符。我的列表里就很少字符。所以不是很建议采用此种方法。

special_symbol = ["?", "*", "@", "#", "$", "&", "%", "(", ")", " ", ""]

方法四:(可行,麻烦程度较方法三更高)

用双引号包含某段带有非法字符的路径片段

例如,打开 Program Files (x86) 文件夹:

1

$ cd Program" Files (x86)"

这种方法非常灵活,双引号使用次数不限,只要成对出现即可,终端会对引号内容照单全收。

例如,打开 Program Files (x86)/Adobe/Adobe Photoshop CS6 文件夹,你还可以这样:

1

$ cd Pro"gram Fi"les" (x86)/Adobe""/Adobe "Photo"shop C"S6

这条指令间断、或不间断地使用了4次双引号,只要保证所有空格和括号都被包括在成对的双引号范围内,文件夹都能正常打开。

总结一下:最好最快速的方法:在linux下处理路径的时候,如果遇到一些特殊符号,执行命令出错的时候,那就使用双引号“”进行处理一下就ok了。

参考文献:https://www.cnblogs.com/wjyHIT2011/p/6801727.html

Logo

更多推荐