Мне нужно сгенерировать список всех файлов в определенном каталоге и разбить его на X списков, каждый из которых содержит фиксированное количество данных файлов.
Например, у меня 95 Гб данных.
- сгенерировать список файлов (
total.txt
) - разделить
total.txt
на 3 списка:slice1.txt
содержащий список первых 35 Гб файловslice2.txt
содержащий список следующих 35 Гб файлов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