我有大量的文件,我試圖按字母順序組織成三個文件夾。我試圖讓bash腳本一起獲得文件的第一個字母,然後將它移動到基於第一個字母的文件夾中。Bash:根據名字的第一個字母移動文件
例如:
文件 - >文件夾名
蘋果 - > AG
香蕉 - > AG
番茄 - > HT
斑馬 - > UZ
任何提示將不勝感激! TIA!
我有大量的文件,我試圖按字母順序組織成三個文件夾。我試圖讓bash腳本一起獲得文件的第一個字母,然後將它移動到基於第一個字母的文件夾中。Bash:根據名字的第一個字母移動文件
例如:
文件 - >文件夾名
蘋果 - > AG
香蕉 - > AG
番茄 - > HT
斑馬 - > UZ
任何提示將不勝感激! TIA!
#!/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
謝謝!正是我在找什麼。 – user1247483
我可以建議檢查一下,如果每個文件實際上是您剛剛創建的一個dirs ... 'if [-d「$ file」];那麼' –
@AndyD:你的評論似乎不符合答案或問題。 –
你想要substring expansion和case statement。例如:
thing=apples
case ${thing:0:1} in
[a-gA-G]) echo "Do something with ${thing}." ;;
esac
謝謝!讓我朝着正確的方向前進。 – user1247483
添加我的代碼 - 這是基於丹尼斯·威廉森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
完全符合我的賬單! – Pitto
你有什麼試過的?你卡在哪裏? 「A-G」,「H-T」和「U-Z」是如何決定的?這些首字母以外的文件會發生什麼? – sarnold