У меня есть каталог с 27K файлами, я хотел бы разбить их на несколько НЕЗАВИСИМЫЙ tar файлы, каждый будет иметь 5000 файлов, а последний, очевидно, будет иметь 2 КБ (27 КБ не делятся на 5).
Какой самый быстрый / простой способ сделать это?
Сначала создайте файлы с именами для каждого архива:
find <directory> | split -l 5000 - files.
Затем создайте смолы:
for f in files.*; do tar -cf $f.tar --files-from $f; done
Не проверено, но основная идея должна работать.
#!/bin/bash
files=( dir/* )
n=1
for ((i = 0; i < ${#files[@]}; i+=5000)); do
IFS=$'\n' tar cvzf foo_$((n++)).tgz --files-from - <<<"${files[*]:i:5000}"
done
Создайте массив с именем files
который содержит все содержимое каталога dir
. Обходите массив, увеличивая итератор на 5000 за раз. Использовать расширение параметра смещения в массиве для создания скользящего окна, содержащего до 5000 элементов за раз "${files[@]:i:5000}"
и передайте это tar
и увеличиваем имя файла на единицу $((n++))
по каждому звонку.