本篇主要介紹bash腳本中對于含空格文件處理方式。
在批量處理音頻文件時候使用下面的腳本發(fā)現(xiàn)含有空格的文件名并不能被處理;
#$1: 遍歷的文件夾
rootDir=$1
cd $rootDir
allAudioFile=$(find $1 -name "*\.mp3")
for oneAudioFile in $allAudioFile
do
mv -f $oneAudioFile $rootDir
done
通過set -x將執(zhí)行信息打印出來,發(fā)現(xiàn)可以執(zhí)行到,但是執(zhí)行過程提示找不到對應的文件名,mv對應的source文件并不是原本的文件名,通過對比發(fā)現(xiàn)原來是文件名中含有空格,導致在for循環(huán)的過程中并沒有將完整的文件名取出來;
例如有文件a b.mp3這時候在for循環(huán)的時候會有下面的打?。?/p>
mv: cannot stat “./a” : No such file or directory
從上面的錯誤信息可以發(fā)現(xiàn)原本的文件名由于空格被打斷了,因此需要在for循環(huán)處理的過程中識別到文件名是含有空格的,從而對文件名中的空格不做處理;
bash使用IFS變量進行分割,所以需要修改IFS的分隔方式進而重新隔離,即需要將"\n"換行處理作為處理方式:
IFS=$(echo -en “\n\b”)
IFS=$(echo -en “\n\r”)
上面的兩種方式均可(使用Ubuntu16.04),其它也可以,只需要在處理的時候?qū)?\n"作為其中一個標識即可,因為使用find命令或者其他命令會將結果以行的形式存放到變量中;
#$1: 遍歷的文件夾
rootDir=$1
cd $rootDir
allAudioFile=$(find $1 -name "*\.mp3")
IFS_BACKUP=$IFS
IFS=$(echo -en "\n\b")
#IFS=$(echo -en "\n\r")
for oneAudioFile in $allAudioFile
do
mv -f "$oneAudioFile" $rootDir
done
IFS=$IFS_BACKUP
至此,bash腳本中對于含空格文件處理方式介紹完畢,當然要記得將原本的IFS內(nèi)容保存下來,腳本跑完了將原本的內(nèi)容放回去。
總結
以上所述是小編給大家介紹的處理Shell腳本中帶有空格的變量(bash腳本),希望對大家有所幫助!
您可能感興趣的文章:- 使用批處理腳本在特定目錄中啟動Git-Bash窗口
- 詳解bash中的腳本調(diào)試機制
- Bash 腳本實現(xiàn)每次登錄到 Shell 時可以查看 Linux 系統(tǒng)信息
- 如何利用Bash腳本監(jiān)控Linux的內(nèi)存使用情況
- bash腳本中將密碼傳遞給ssh/scp命令方法詳解
- linux Bash腳本判別使用者的身份方法示例
- 詳解shell中source、sh、bash、./執(zhí)行腳本的區(qū)別
- linux bash腳本監(jiān)控啟動停止weblogic服務的腳本寫法
- 如何寫出安全的、基本功能完善的Bash腳本