Linux shell指令碼 遍曆帶空格的檔案名稱

來源:互聯網
上載者:User

一般的寫法是

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.