Linux shell脚本 遍历带空格的文件名
一般的寫法是
for f in `ls ./`
但是如果文件名中帶空格,比如"A B" 那么雖然ls能正確列出,但是for卻會把空格當成分隔符 將A,B分別賦給f,導致變成兩個文件名
研究發現問號?在文件名中也可以代表空格。因此可以這樣寫:
for f in `ls ./ | tr " " "\?"`
先將ls的每一行的空格用tr替換為問號。這樣的f可以執行mv,cp等操作。echo也能正確將?變成空格顯示。要是涉及到字符串操作不爽,反正現在已經在變量里面了可以直接替換回來
f=`tr "\?" " " <<<$f`
附上一個將文件名遞歸改成小寫的程序
#!/bin/sh
function xx(){
?local oldpwd="$PWD"
?cd $1
?local f=""
?local m=""
?for f in `ls ./ | tr " " "\?"`
?do
??echo $f
?#?f=`tr "\?" " " <<<$f`
??if [ -d "$f" ]
??then
???xx "$f"
??fi
??m=`tr '[A-Z]' '[a-z]' <<< "$f" `
??if [ "$f" != "$m" ]
??then
???if [ -e ./"$m" ]?
???then
????echo in $PWD: file $f can\'t be transform since file $m exists
???else
????mv ./"$f" ./"$m"
???fi
??fi
?done
?cd "$oldpwd"
}
xx $1
轉載于:https://www.cnblogs.com/google4y/archive/2013/03/12/2956086.html
總結
以上是生活随笔為你收集整理的Linux shell脚本 遍历带空格的文件名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP桥接工具设计
- 下一篇: 关于新手使用CPC客户端的操作指南