Linux Bash スクリプト - 連続したファイルを連続したフォルダーに並べ替える

Linux Bash スクリプト - 連続したファイルを連続したフォルダーに並べ替える

次のような名前のファイルのシーケンスが 1000 個あります。

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

ファイルを次の名前のフォルダに分類したいと思います。

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

次のような行を使用することで、これを行うのにかかる時間を短縮できることがわかっています。

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

しかし、上記ではソート時間がわずかに短縮されるだけです。ソート操作全体を自動化するにはどうすればよいでしょうか?

let N ++ を使って何かする必要があることはわかっていますが、それをどのように組み込むかがわかりません。

答え1

これで動作するはずです。まず、次のようなテスト ファイルを作成しました。

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

を使用してそれらが存在することを確認しました。ls -1出力は次のようになりました。

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

次に、これらのファイルを含むディレクトリ内で次の Bash スクリプトを実行しました。

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

それが完了したら、次のようにディレクトリをチェックしls -1、返された出力は次のとおりです。

dir01-01
dir01-02
dir02-01
dir02-02

ディレクトリは存在しますが、ファイルがコピーされたことを確認するために、次のようlsにコマンドを実行しました。出力は次のとおりです。*ls -1 *

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

関連情報