여러 파일을 여러 아카이브에 압축


13

리눅스를 실행합니다. 약 150 개의 큰 CSV 파일 디렉토리가 있습니다. 단순히 zip -9그들에 대한 작업을 수행하면 여전히 너무 큰 단일 파일이 생성됩니다. 나는 그것들을 각각 30-40 CSV의 4 개 또는 5 개의 zip 파일로 간단히 압축하고 싶습니다; 이런 식으로 시퀀싱 또는 스패닝 된 우편 주문은 문제가되지 않습니다. 각 우편 번호는 독립적입니다. 이를 수행하는 간단한 방법이 있어야합니다. 어떤 제안?

(그리고 가능하다면 zip이 선호되는 형식입니다)

답변:


23

-s로 충분하지 않습니까? zip -s를 사용하여 파일을 최대 크기의 파일로 분할 할 수 있습니다. 예 :

"zip -s 300m <2GB 파일>"은 다음을 생성합니다.

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직접 작동하지 않습니다 (내가 먼저 그들을 재결합 우편 -F를 사용합니다). 요청 된대로 "독립적 인"것은 아닙니다.
sourcejedi 2016 년

1
@sourcejedi :이 답변 ( superuser.com/a/602736/195224 )에 좀 더 자세한 설명이 있습니다.
mpy

@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 파일이 있는지와 관련하여 더 예측 가능합니다.
mpy

맨 페이지를 너무 빨리 훑어 보았습니다. 고마워, 내가 고칠거야!
sourcejedi 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.