Bashはファイル名に基づいてフォルダを作成し、ファイルをフォルダに移動できますか?

Bashはファイル名に基づいてフォルダを作成し、ファイルをフォルダに移動できますか?

/Desktop/a/ には次のファイルセットがあります。

DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
DSCN1841.AVI00001.png

私が望むのは、次のような構造を持つことです。

Desktop/a/DSCN1840/

  DSCN1840.AVI00001.png

  DSCN1840.AVI00002.png

  DSCN1840.AVI00003.png

Desktop/a/DSCN1841/

  DSCN1841.AVI00001.png

ベストアンサー1

ワンタイムステップですべてのファイルを繰り返して、必要なサブディレクトリ名を収集できます。サブディレクトリがまだない場合は、そのサブディレクトリにファイルを移動します。

for f in *.png
do
  subdir=${f%%.*}
  [ ! -d "$subdir" ] && mkdir -- "$subdir"
  mv -- "$f" "$subdir"
done

これの重要な部分はの引数拡張です${f%%.*}。つまり、%%最も長い一致部分を削除し、ピリオド()を使用して.AVI00003.pngファイル名などの部分を効果的に削除し、先行ディレクトリ指定子のみを残します。

おすすめ記事