5

大量のファイルをアルファベット順に 3 つのフォルダーに整理しようとしています。ファイルの最初の文字を取得し、その最初の文字に基づいてフォルダーに移動する機能を持つbashスクリプトをまとめようとしています。

例えば:

ファイル→フォルダ名

リンゴ -> AG

バナナ→AG

トマト→HT

シマウマ -> UZ

ヒントをいただければ幸いです。ティア!

4

3 に答える 3

6
#!/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
于 2012-05-22T00:27:34.160 に答える
2

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
于 2012-05-22T00:27:04.567 に答える
0

私のコードを追加する - これは 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
于 2016-04-09T14:39:15.733 に答える