SHELL技巧:處理檔名中的那些空格
現在很多人命名的時候都喜歡用空格,例如“An Introduction.doc”。但是這種命名方式給Linux命令列工具和Shell帶來了困擾,因為大多數命令中,都是預設以空格做為值與值之間的分隔符,而不是做為檔名的一部分。
看下面的指令碼,我們可以瞭解的更清楚:
執行的結果如下:
實際上,當前目錄的檔案只有兩個:
對於簡單的檔名,如上例中,我們也可以通過 for i in *doc 這樣簡單的方法來獲得檔案列表。但是對於複雜的環境,如下圖,我們如何獲得這些列表呢?
有一個辦法,通過 for i in "* *" 可以獲得檔名的列表,但是一個很糟糕的列表,因為這個結果是一個兩個檔名在一起的列表,我們完全無法拿來做後續的操作,如下圖所示。
通過 "*\ *" 這樣的技巧可以避免上面所說的問題,但是在應用mv或其他操作時,還是會出現問題。
上面的問題,可以通過將變數放入引號中("$i")解決,通常情況下,引號中的空格可以被正確的處理。但這並不是一個恆久的解決辦法,因為我們無法處理管道、子Shell等複雜的情況。
一個終極的解決辦法就是設定IFS(the Internal Field Separator),不要用空格做為IFS,選擇其他的符號。先來看看man page:
IFS: The Internal Field Separator that is used for word splitting after expansion and to split lines
into words with the read built-in command. The default value is “<space><tab><new-line>”.
另外一個辦法就是在對檔名進行處理之前,先將空格替換為特殊的自定義符號,然後在處理結束的時候,再替換回來。
safename="$(echo name | sed 's/ /_-_/g')"
original="$(echo $safename | sed s'/_-_/ /g')"
其他還有一些方法,例如利用find命令。
參考資料:
相關文章
- Linux 下如何處理包含空格和特殊字元的檔名Linux字元
- Shell指令碼逐行處理文字檔案技巧指令碼
- 【轉載】SHELL字串處理技巧(${}、##、%%)字串
- CSS 的空格處理CSS
- Python中檔案I/O高效操作處理的技巧Python
- 處理Windows 95的長檔名中斷詳解 (轉)Windows
- 批量處理檔名稱(上)
- P處理 批量更改檔名
- tar不能處理長檔名
- windows bat系列11:for處理案例四 去掉字串中的空格WindowsBAT字串
- 處理檔名內含有特殊字元的檔案 (轉)字元
- 處理 Linux 檔案的 3 個技巧Linux
- [Golang]呼叫外部shell程式處理檔案Golang
- 處理 JS 中 undefined 的 7 個技巧JSUndefined
- 檔案下載檔名亂碼處理
- shell中字串的處理字串
- PHP-如何處理檔名亂碼PHP
- shell 字元處理字元
- R中的迴圈多圖處理技巧
- shell中如何處理兩個數的減法
- 用shell處理二進位制檔案(轉)
- MongoDB for Windows使用批處理檔案啟動閃退之空格惹的禍MongoDBWindows
- [草稿] CSS Reset 中應該處理那些元素呢?CSS
- windows批處理之五-for語句中的檔名擷取Windows
- Linux shell中的那些小把戲Linux
- Linux shell 中的那些小把戲Linux
- 名稱空間與巢狀命名中的處理巢狀
- shell判斷系統路徑中是否存在空格
- shell字串處理總結字串
- 批處理以當前時間為檔名建立檔案
- Python 計算生態中那些著名的庫-文字處理Python
- 【監聽】手工配置tnsnames.ora檔案注意事項——謹慎處理空格
- 對於CSV檔案中{,}和{"}的處理
- 將DOS批處理檔案轉換為Shell指令碼指令碼
- 【Python】模擬windows檔名排序(自動處理檔名中有數字型別排序)PythonWindows排序型別
- Android加固和簽名的那些坑(防掉坑技巧)Android
- 異常處理遇到過的那些坑
- JavaScript非同步處理的那些事兒JavaScript非同步