12

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

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

2 ответа2

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" разархивирует все вместе.

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]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .