大量のファイルをアルファベット順に 3 つのフォルダーに整理しようとしています。ファイルの最初の文字を取得し、その最初の文字に基づいてフォルダーに移動する機能を持つbashスクリプトをまとめようとしています。
例えば:
ファイル→フォルダ名
リンゴ -> AG
バナナ→AG
トマト→HT
シマウマ -> UZ
ヒントをいただければ幸いです。ティア!
大量のファイルをアルファベット順に 3 つのフォルダーに整理しようとしています。ファイルの最初の文字を取得し、その最初の文字に基づいてフォルダーに移動する機能を持つbashスクリプトをまとめようとしています。
例えば:
ファイル→フォルダ名
リンゴ -> AG
バナナ→AG
トマト→HT
シマウマ -> UZ
ヒントをいただければ幸いです。ティア!
#!/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
You want substring expansion and a case statement. For example:
thing=apples
case ${thing:0:1} in
[a-gA-G]) echo "Do something with ${thing}." ;;
esac
私のコードを追加する - これは Dennis Williamson に基づいて 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