centos7的路徑含有空格Linux命令使用時路徑存在空格、特殊符號(如-、@等等)


1、

https://blog.csdn.net/Homewm/article/details/102935965?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-102935965.pc_agg_new_rank&utm_term=linux%E8%B7%AF%E5%BE%84%E4%B8%AD%E5%8C%85%E5%90%AB%E7%A9%BA%E6%A0%BC&spm=1000.2123.3001.4430

https://blog.csdn.net/KSONJ120/article/details/105740742?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

https://blog.csdn.net/liweiminlining/article/details/100991532?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.no_search_link

命令使用時路徑存在空格、特殊符號(如-、@等等)如何處理呢?

再如可以轉義的字符包括:"?"(問號), "*"(星號), " "(空格), "$"(貨幣符), "&"(邏輯符), "( )"(英文括號)等等。

很早之前應該是遇到過這種問題,也處理過該問題,但是不記得怎么處理的了,也沒找到自己以前處理過的博客,那就簡記下吧。

(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
會報錯無此文件或文件夾,如下圖所示:

 

解決辦法是路徑加上一個雙引號。然后就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”


方法二:(貌似不能行)

看到有的博客說在路徑前面加上--就能解決問題,然后我嘗試了一下,發現仍然會出現這種報錯問題。

 

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

將每一個存在特殊符號的位置,都使用轉義符“\”進行轉義。這種方法也是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了。
————————————————

 

2、

https://blog.csdn.net/qq_44737312/article/details/120994049?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-4.no_search_link&spm=1001.2101.3001.4242.3

當路徑變量包含空格時,直接使用會出錯

$ pwd
/home/test/Desktop/中文 空格1/English space2/混合——1_1 空 格 3
$ DIR="/home/test/Desktop/中文 空格1/English space2/混合——1_1 空 格 3"

例如,直接cd到這個有空格的路徑變量是不行的

cheng@cheng:~/Desktop$ cd $DIR
bash: cd: 參數太多

情況1:當外層無引號時,路徑變量加上引號就行啦

比如,把cd 后面的path變量用引號引起來就好了

cheng@cheng:~/Desktop$ cd "$DIR"
cheng@cheng:~/Desktop/中文 空格1/English space2/混合——1_1 空 格 3$


比如,把cd 后面的path變量用引號引起來就好了

當外層沒有引號,只能"$DIR" ,不能\"$DIR\",否則會報錯:

cheng@cheng:~/Desktop$ sudo dpkg -i \"$DIR\"/apps/xxxx-4.2.1-arm64.deb
dpkg: 錯誤: 無法訪問歸檔 '"/home/test/Desktop/中文 ': 沒有那個文件或目錄

cheng@cheng:~/Desktop$ sudo dpkg -i "$DIR"/apps/xxxx4.2.1-arm64.deb
cheng@cheng:~/Desktop$ sudo dpkg -i "$DIR"/apps/xxxx-4.2.1-arm64.deb
情況2:當外層有引號時,加引號並轉義或者加單引號
方法1:路徑變量加雙引號並轉義
echo 'rootpassword'|su -c "dpkg -i \"$DIR\"/apps/xxx.deb"
方法2:路徑變量加單引號
echo 'rootpassword'|su -c "dpkg -i '$DIR'/apps/xxx.deb"
————————————————

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM