/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
ファイル名などの部分を効果的に削除し、先行ディレクトリ指定子のみを残します。