2014-02-24 34 views
0

我下載了一堆帶有亂碼的zip文件。文件名看起來像:拆分一個帶有亂碼的字符串

598»° 2Äêºó.zip 

599»° ²Ýñ¾ÅÈË.zip 

我試着寫一個腳本來重命名Linux系統中的文件名,這樣的名字上面會成爲598.zip599.zip

我用lsgrep命令將所有的zip文件讀入一個長字符串,例如稱爲'total'。然後我用for loop

for $name in $total; do 

     mv $name $newname; 

    done 

不幸的是,腳本在這裏不起作用。實際上,for循環會將字符串$ total按空格分隔。上面顯示的名稱具有空格字符。這些額外的空格字符使得$ name與zip文件的實際名稱不匹配。我不知道如何處理它。任何幫助將不勝感激!

+1

引用您的變量以防止在空白處分裂。 – devnull

+0

可能是此問題與您的shell配置文件中使用的字符編碼有關。嘗試使用utf-8獲取可讀的表示 –

回答

4
find -maxdepth 1 -iname '*.zip' | while read ie 
do 
    oe=$(awk NF=1 FPAT=[0-9]+ <<< "$ie").zip 
    mv "$ie" $oe 
done 
+0

謝謝!這工作正常。但是,輸出看起來像「598 2.zip」,「599 .zip」 – ohmygoddess

+0

爲什麼'1'聲望? :] – MLSC

0

我得到了答案。 只需添加以下代碼之前,該腳本將這樣的伎倆:

IFS=' 
    ' 

這將使用換行符作爲內部字段分隔符。現在空間只是「普通」的角色。

0

FPAT僅在awk 4及以上版本中受支持。你可以直接使用shell。

find -maxdepth 1 -iname '*.zip' | while read file 
do 
    echo mv "$file" "${file/[^0-9]*/}" 
done 

如果上面的腳本是好的,除去echo,並再次運行。