2012-11-05 1 views
1

각각 약 60MB의 8000gz 파일이 있습니다. 나는 그들을 몇 개의 더 큰 파일들로 병합하고 싶다. 그래서 어떻게 bash 스크립트 에서 그것을하지 않고 풀어?쉘 스크립트 : 작은 gzip 파일을 압축 해제하지 않고 큰 파일로 결합하십시오.

쉘 스크립트는 결합 할 새 파일 크기 또는 파일 수로 입력을 사용할 수 있습니다.

예를 들면 1.gz, 2.gz, 3.gz ... 10.gz 이제 3 파일 당 하나의 파일이 필요하므로 이제 1.gz, 2.gz 및 3.gz 1_new.gz 등으로 결합됩니다.

+1

시도한 내용을 포함하여 질문을 편집하십시오. 행운을 빕니다. – shellter

+0

원래 큰 파일을 작은 파일로 분할하는 한 가지 방법은 다음과 같습니다. http://en.wikipedia.org/wiki/Split_(Unix) – Bernhard

+0

@shellter and Brian : 죄송합니다. 쉘 스크립팅에 능숙하지 않습니다. – Amar

답변

1

gzip 에드 파일을 함께 concatinate 할 수 있습니다 : 먼저 소스 파일의 압축을 해제 한 다음에서 압축 된 tar 파일을 생성해야합니다 자세한 내용은 gzip manual을 참조하십시오.

스크립트는 tar에 대한 안스 Wiechers의 것과 유사한 것이다 : 위의 코드가 안된

#!/bin/bash 

maxnum=$1 
i=1 
j=0 
for f in *.gz; do 
    cat $f >> archive_$j.gz 
    i=$((i+1)) 
    if [ $i -eq $maxnum ]; then 
     i=1 
     j=$((j+1)) 
    fi 
done 

하는 것으로.

당신이 일을 보관할 경우

제대로 tar 더 나은 솔루션이지만, 당신이 원하는 모든이가 좋은으로 gzip 다음 에드 이러한 concatination 된 파일의 숫자가 concatinate 경우.

+0

고마워,이 정도면 충분 해. :) – Amar

1

gzip은 하나의 파일 만 압축 할 수 있습니다. 여러 개의 파일을 하나의 아카이브에 결합하려면 tar이 필요하며 그 중 하나는 gzip으로 압축 할 수 있습니다 (선택 사항). 그냥 압축 파일을 병합 할 경우이 같은 것을 사용할 수 있습니다

maxnum=$1 
i=1 
j=0 
for f in *.gz; do 
    tar rf archive_$j.tar $f 
    if [ $i -eq $maxnum ]; then 
    i=1 
    j=$((j+1)) 
    fi 
done 

압축 된 소스 파일을 포함하는 압축 tar 파일을 생성 할 것이다.

압축되지 않은 소스 파일을 포함하는 압축 된 tar 파일을 생성하려는 경우 압축 된 tar 파일을 업데이트 할 수 없기 때문에 위의 방법은 작동하지 않습니다. 당신이 gunzip 결과 파일은 당신이 하나를 얻을 수 있습니다 그러나 때,

maxnum=$1 
i=1 
j=0 
flist= 
for f in *.gz; do 
    gunzip $f 
    flist="$flist $(basename $f .gz)" 
    if [ $i -eq $maxnum ]; then 
    tar czf archive_$j.tar.gz --remove-files $flist 
    i=1 
    j=$((j+1)) 
    flist= 
    fi 
done 
+1

Hey Ansgar, 자세한 답장을 보내 주셔서 감사합니다 :) 그러나 나는 필요한 수의 파일 몇 개를 압축 해제하지 않고 많은 수의 gzip 파일을 결합해야했습니다. 명확하지 않은 경우 질문을 수정합니다. – Amar

관련 문제