本篇主要介紹bash腳本中對于含空格檔案處理方式。
在批量處理音頻檔案時候使用下面的腳本發現含有空格的檔案名并不能被處理;
#$1: 周遊的檔案夾
rootDir=$1
cd $rootDir
allAudioFile=$(find $1 -name "*\.mp3")
for oneAudioFile in $allAudioFile
do
mv -f $oneAudioFile $rootDir
done
通過set -x将執行資訊列印出來,發現可以執行到,但是執行過程提示找不到對應的檔案名,mv對應的source檔案并不是原本的檔案名,通過對比發現原來是檔案名中含有空格,導緻在for循環的過程中并沒有将完整的檔案名取出來;
例如有檔案a b.mp3這時候在for循環的時候會有下面的列印:
mv: cannot stat “./a” : No such file or directory
從上面的錯誤資訊可以發現原本的檔案名由于空格被打斷了,是以需要在for循環處理的過程中識别到檔案名是含有空格的,進而對檔案名中的空格不做處理;
bash使用IFS變量進行分割,是以需要修改IFS的分隔方式進而重新隔離,即需要将"\n"換行處理作為處理方式:
IFS=$(echo -en “\n\b”)
IFS=$(echo -en “\n\r”)
上面的兩種方式均可(使用Ubuntu16.04),其它也可以,隻需要在處理的時候将"\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内容儲存下來,腳本跑完了将原本的内容放回去。
總結
以上所述是小編給大家介紹的處理Shell腳本中帶有空格的變量(bash腳本),希望對大家有所幫助!