Сгенерировать список файлов и разбить его на 2 списка по X Мб файлов каждый

Сгенерировать список файлов и разбить его на 2 списка по X Мб файлов каждый

Мне нужно сгенерировать список всех файлов в определенном каталоге и разбить его на X списков, каждый из которых содержит фиксированное количество данных файлов.

Например, у меня 95 Гб данных.

  • сгенерировать список файлов ( total.txt)
  • разделить total.txtна 3 списка:
    1. slice1.txtсодержащий список первых 35 Гб файлов
    2. slice2.txtсодержащий список следующих 35 Гб файлов
    3. slice3.txtсодержащий список оставшихся файлов

Есть подсказка? Я гуглил и игрался с find, awk, grep, но эта задача, похоже, действительно выше моих компетенций.

решение1

Вы можете попробовать использоватьрасколотькоманда для разделения файлов:

split total.txt -b 4444160

Вышеуказанный файл будет разделен total.txtна файлы по 35 ГБ.

решение2

while read filename; do cat $filename; done < total.txt | split -b 35G - slice

Это создаст «sliceaa», «sliceab», «sliceac», которые вы можете переименовать.

С другой реализациейsplit, вам, возможно, придется сказать-b 35000m

Если у вас есть bash, вы можете написать

cat $(< total.txt) | split -b 35G - slice

предположим, что нет сотен или тысяч имен файлов.

Создаватьtotal.txt

files=(*)
printf "%s\n" "${files[@]}" > total.txt

Связанный контент