Zip много файлов в несколько архивов


12

Под управлением Linux. У меня есть каталог около 150 больших файлов CSV; простое выполнение с zip -9ними приводит к монолитному файлу, который все еще слишком велик. Я хотел бы просто сжать их в возможно четыре или пять почтовых файлов 30-40 CSV каждый; таким образом, порядок последовательности или составного почтового индекса не будет проблемой, поскольку каждый почтовый индекс независим. Там должен быть простой способ сделать это. Какие-либо предложения?

(и да, zip является предпочтительным форматом, если это возможно)

Ответы:


22

Не достаточно ли переключателя? Вы можете использовать zip -s, чтобы разбить файл на файлы максимального размера, например:

"zip -s 300m <файл 2 ГБ>" производит:

file.zip (300 mb, master file)
file.001.zip (300 mb)
file.002.zip (300 mb)
file.003.zip (300 mb)
file.004.zip (300 mb)
file.005.zip (300 mb)
file.006.zip (200 mb)

Тогда "unzip file.zip" разархивирует все вместе.


Какая версия Zip это ?? Я получаю file.z01 file.z02 ... file.zip и unzip file.zipне работает напрямую (я бы использовал zip -F для их рекомбинации первым). Обратите внимание, что они не являются «независимыми» в соответствии с запросом.
sourcejedi

1
@sourcejedi: В этом ответе ( superuser.com/a/602736/195224 ) приведены некоторые более подробные объяснения.
mpy

@ Я знаю, я только что написал этот ответ :).
sourcejedi

@sourcejedi: О да, теперь ты это говоришь ...;)
mpy

2

Используйте split в списке входных файлов :-).

(Не проверено, я включил команды rm для очистки, позаботьтесь).

ls *.csv > csvfiles
split -d -l30 - csvfiles < csvfiles
for i in csvfiles[0-9][0-9]; do
  zip "$i.zip" -@ < "$i"
done

rm csvfiles
rm csvfiles[0-9][0-9]

Почему вы используете split -C( --line-bytes), а не split -l( --lines)? Это было бы более предсказуемо, учитывая, сколько CSV-файлов находится в одном архиве.
День

Я просмотрел справочную страницу слишком быстро. Спасибо, я все исправлю!
sourcejedi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.