ディレクトリに数千のファイルがあり、それらをサブディレクトリに分割し、各サブディレクトリに特定の数のファイルを含めたいと考えています。それぞれに特定の番号が含まれている限り、どのファイルがどのディレクトリに入るかは気にしません。すべてのファイル名には共通の末尾 (.txt など) がありますが、前に続くものは異なります。
誰でもこれを行う簡単な方法を知っています。
max_per_subdir=1000
start=1
while [ -e $(printf %03d $start) ]; do
start=$((start + 1))
done
find -maxdepth 1 -type f ! -name '.*' -name '*.txt' -print0 \
| xargs -0 -n $max_per_subdir echo \
| while read -a files; do
subdir=$(printf %03d $start)
mkdir $subdir || exit 1
mv "${files[@]}" $subdir/ || exit 1
start=$((start + 1))
done