2015-10-14 131 views
0

我如何才能將這些文件的名稱的前9個字符的9個字符將文件移動到與文件名稱相同的新文件夾中?

example 

    I have a folder containing number of files with various names each 
    group of files begin with same 9 characters ex: 

    first group [HD9523587_352, HD9523587_258, HD9523587_785 ,HD9523587_473] 
    second group[Hip046329_258, Hip046329_364, Hip046329_681, Hip046329_235] 

    and so on 

我需要新的文件夾使用相同的9個字符的同名分享到創建的文件夾的文件組每個 組然後將每個組文件移動到這些文件夾中。 謝謝

回答

7

只提取前9個字符用作目錄名稱。在bash中,最簡單的方法是使用 正則表達式匹配 參數子字符串擴展。

for f in *; do 
    # [[ $f =~ ^(.{9}) ]] 
    # dir=${BASH_REMATCH[1]} 
    dir=${f:0:9} 
    mkdir -p "$dir" && mv "$f" "$dir" 
done 
+1

在Bash中,最簡單的方法是使用參數擴展:'dir = $ {f:0:9}'。請注意,對於正則表達式,如果文件名的長度小於9,則BASH_REMATCH將爲空(因此您將在'mkdir'中出現錯誤)。 –

+1

同意,這是一個更好的解決方案。 – chepner

+0

$ {f:0:9}是做什麼用的? – ergonaut

相關問題