LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

Нуууу не знаю, почему это у вас должно работать быстрее.

Вот вам для произвольного количества, чтобы не ошибиться в знаках у printf:

#!/bin/bash
MAX_FILE_IN_DIR=25

files=(largedir/*)
nfiles=${#files[@]}
make_dir_and_move() {
        printf -v DIR "%0${#nfiles}d" $((++DIRN))
        mkdir $DIR
        mv "${out[@]}" $DIR
        out=()
}
for i in ${!files[@]} ; do
  [[ ${#out[@]} -eq $MAX_FILE_IN_DIR ]] && make_dir_and_move
  out+=("${files[i]}")
done
[[ ${#out[@]} -ne 0 ]] && make_dir_and_move
У скрипта есть одна плюха, но оставим в качестве домашнего задания.

Исправление vodz, :

Нуууу не знаю, почему это у вас должно работать быстрее.

Вот вам для произвольного количества, чтобы не ошибиться в знаках у printf:

#!/bin/bash
MAX_FILE_IN_DIR=25

files=(largedir/*)
nfiles=${#files[@]}
make_dir_and_move() {
        printf -v DIR "%0${#nfiles}d" $((++DIRN))
        mkdir $DIR
        mv "${out[@]}" $DIR
        out=()
}
for i in ${!files[@]} ; do
  [[ ${#out[@]} -eq $MAX_FILE_IN_DIR ]] && make_dir_and_move
  out+=("${files[i]}")
done
[[ ${#out[@]} -ne 0 ]] && make_dir_and_move

Исходная версия vodz, :

Нуууу не знаю, почему это у вас должно работать быстрее.

Вот вам для произвольного количества, чтобы не ошибиться в знаках у printf:

#!/bin/bash
MAX_FILE_IN_DIR=25

files=(largedir/*)
nfiles=${#files[@]}
make_dir_and_move() {
        printf -v DIR "%0${#nfiles}d" $((++DIRN))
        mkdir $DIR
        mv "${out[@]}" $DIR
}
for i in ${!files[@]} ; do
  if ((${#out[@]}==MAX_FILE_IN_DIR)) ; then
        make_dir_and_move
        out=()
  fi
  out+=("${files[i]}")
done
[[ ${#out[@]} -ne 0 ]] && make_dir_and_move