Если все ваши файлы имеют одинаковый размер или если общий размер каталога не должен быть очень точным, вы можете сделать это с помощью этих забавных команд.
Он создает подкаталог каждые 250 файлы и перемещает файлы в подкаталог. Если у вас есть 1000 файлов, они будут перемещены в 4 подкаталога с именами 1, 2, 3 и 4. Если у вас есть 1001 файл, 5-й подкаталог будет создан для последнего файла.
cd YOUR_BIG_DIR
n=250 # will change destination dir after 250 files
dir=1; mkdir -p $dir # create first destination sub-directory "1"
ls -1 | while read f; do ((c+=1)); echo mv "$f" $dir/; [ $((c % n)) -eq 0 ] && ((dir+=1)) && mkdir -vp $dir; done
Если вывод выглядит так, как вы хотите, удалите echo
из команды, чтобы действительно mv
файлы.
Та же команда, объясненная и без "echo" "используется для тестирования:
# list all files, 1 per line
ls -1 \
| while read f; do # with each file "$f"
((c+=1)) # increase file counter
mv "$f" $dir/ # move the file to $dir/
# if counter c is a divisor of n, increase the directory number
# and create the new destination directory
[ $((c % n)) -eq 0 ] && ((dir+=1)) && mkdir -v -p $dir
done
Если вы хотите, чтобы подкаталоги были более точного размера, вам потребуется написать что-то более сложное, используя stat -c %s
, чтобы получить размер каждого файла или что-то подобное .