Назад | Перейти на главную страницу

tar конкретный номер файла

У меня есть каталог с 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++)) по каждому звонку.