2012-05-22 106 views
4

我有大量的文件,我試圖按字母順序組織成三個文件夾。我試圖讓bash腳本一起獲得文件的第一個字母,然後將它移動到基於第一個字母的文件夾中。Bash:根據名字的第一個字母移動文件

例如:

文件 - >文件夾名

蘋果 - > AG

香蕉 - > AG

番茄 - > HT

斑馬 - > UZ

任何提示將不勝感激! TIA!

+1

你有什麼試過的?你卡在哪裏? 「A-G」,「H-T」和「U-Z」是如何決定的?這些首字母以外的文件會發生什麼? – sarnold

回答

5
#!/bin/bash 
dirs=(A-G H-T U-Z) 
shopt -s nocasematch 

for file in * 
do 
    for dir in "${dirs[@]}" 
    do 
     if [[ $file =~ ^[$dir] ]] 
     then 
      mv "$file" "$dir" 
      break 
     fi 
    done 
done 
+0

謝謝!正是我在找什麼。 – user1247483

+0

我可以建議檢查一下,如果每個文件實際上是您剛剛創建的一個dirs ... 'if [-d「$ file」];那麼' –

+0

@AndyD:你的評論似乎不符合答案或問題。 –

0

添加我的代碼 - 這是基於丹尼斯·威廉森99% - 我只是增加了一個if塊,以確保你沒有移動目錄到目標目錄,而我需要一個每個字母的目錄。

#!/bin/bash 
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) 
shopt -s nocasematch 

for file in * 
do 
    for dir in "${dirs[@]}" 
    do 

    if [ -d "$file" ]; then 
     echo 'this is a dir, skipping' 
     break 
    else 
     if [[ $file =~ ^[$dir] ]]; then 
     echo "----> $file moves into -> $dir <----" 
     mv "$file" "$dir" 
     break 
     fi 
    fi 
    done 
done 
+0

完全符合我的賬單! – Pitto

相關問題