1、問題:文件批量重命名和處理文件名中的空格
- 如果文件名中有空格,在執行以下shell腳本的時候會出錯。
- shell 腳本
for filename in `ls`
do
echo $filename
done
- 執行結果:會將帶空格的文件名,以空格作為截分,分兩次(多次)輸出。
2、原因分析及對策
-
原因:Shell 腳本中有個變量叫 IFS(Internal Field Seprator) ,內部域分隔符。默認是 space, tab, newline 來拆解讀入的變量,然后對特殊字符進行處理,最后重新組合賦值給該變量。
-
對策:只需要重置改變量,用完以后記得還原變量。
3、 示例代碼
- 例子1:寫成一行
IFS_old=$IFS; IFS=$'\n';for name in `ls`; do mv $name LW_$name; done; IFS=$IFS_old;
- 例子2:寫成多行
IFS_old=$IFS
IFS=$'\n'
for name in `ls`
do
mv $name LW_$name
done
IFS=$IFS_old