Shell中處理帶有空格的檔案名稱的小trick

來源:互聯網
上載者:User

Shell中處理帶有空格的檔案名稱的小trick 晚上終於把論壇上那個16本Python書的文章裡的書下載完了,發現有好幾本書名前都有一個 [搬書匠#123] 這樣格式的首碼,而且有幾個文檔還莫名其妙的有運行許可權,於是我決定寫個指令碼清理一下,其實是套用一下之前的一個指令碼(把1.abc.mp3改成01.mp3以自動排序): #!/bin/sh# # Description:#    if there is a file with name: [1-9].xxx, it will be changed into 0[1-9].xxx for var in `ls`;do    new=`echo $var | sed "s/^\([1-9]\)\./0\1\./g"`    if [ $var != $new ];then        mv $var $new    fidone 之前這個指令碼運行很正常,我打算直接把 sed 後面的Regex改一改就搞定,結果改了之後刷出來一堆錯誤資訊,說 Can't stat file "xxx", 而 xxx 檔案只是正確檔案名稱中的一段,我如夢初醒,原來是檔案名稱中有空格,ls 返回的 list 被 for 錯誤地逐詞識別了,這下囧了,源檔案空格滿滿的啊,難怪 Unix Haters' Handbook 把檔案名稱中有空格的問題批得一無是處。 經過一番 google 總算是找到了答案,一個很巧妙的手法,只是把第六行改成了: ls * |  while read var. 這其中的道理學過 Shell 的都看得懂,可是想出來可就不容易了。於是興沖沖地重寫了這個指令碼,結果如下: #!/bin/sh ls * | while read vardo    if [ -x "$var" ]; then        chmod a-x "$var"    fi    new=`echo "$var" | sed "s/^\[搬書匠[#0-9]*\]\(.*\)$/\1/g"`    if [ $var != $new ];then        mv "$var" "$new"    fidone注意這裡的變數調用的時候,一定要寫為 "$var",如果手一抖寫成 $var 就又是一大堆看起來莫名其妙的錯誤資訊了。上面這個指令碼運行一切正常。 整個處理過程出現了多次詭異的故障,以至於事實上用的時間比手動修改長多了,不過喜愛編程的同道們都明白,這樣的一番折騰實在是一種娛樂,比起一個個改檔案名稱好玩的多。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.