tar 파일은 스트리밍 형식이므로 cat
두 파일을 함께 사용하여 거의 정확한 결과를 얻을 수 있습니다. 이렇게하려면 디스크로 추출 할 필요가 없습니다. 파일의 압축을 풀고 (만) 함께 연결 한 다음 해당 스트림을 다시 압축 할 수 있습니다.
xzcat *.tar.xz | xz -c > combined.tar.xz
combined.tar.xz
구성 요소 tarball에있는 모든 파일의 압축 된 tarball이 약간 손상됩니다. 압축을 풀려면 결과 중간에 "파일 끝"마커가 표시되므로 --ignore-zeros
옵션 (GNU에서 tar
) 을 사용해야합니다 . 그러나 그 외에는 모든 것이 올바르게 작동합니다.
GNU tar
는 또한 --concatenate
결합 된 아카이브를 생성하기위한 모드를 지원합니다 . 위와 같은 제한 사항이 있습니다 --ignore-zeros
. 추출 하는 데 사용해야 하지만 압축 된 아카이브에서는 작동하지 않습니다. 프로세스 대체를 사용하여 작동하도록 속일 수는 있지만 번거롭고 훨씬 더 취약합니다.
다른 tar 파일에 두 번 이상 나타나는 파일이 있으면 제대로 작동하지 않지만 문제는 없습니다. 그렇지 않으면 원하는 결과를 얻을 수 있습니다. 출력을 파이핑하는 xz
방법 은 출력을 tar
압축 하는 방법 입니다.
특정 tar
구현 에서만 작동하는 아카이브가 귀하의 목적에 적합하지 않은 경우, 다음과 함께 아카이브에 추가 r
하십시오.
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
mkdir tmp
pushd tmp
tar xJf "../$x"
tar rJf ../combined.tar.xz .
popd
rm -r tmp
done
이것은 한 번에 하나의 아카이브 만 추출하므로 작업 공간은 단일 아카이브의 컨텐츠 크기로 제한됩니다. 압축은 최종 아카이브를 한 번에 만들었을 때와 마찬가지로 스트리밍되므로 그 어느 때보 다 좋을 것입니다. cat
버전 보다 속도를 느리게 만드는 초과 압축 해제 및 재 압축을 많이 수행 하지만 결과 아카이브는 특별한 지원없이 어디에서나 작동합니다.
정확히 원하는 것에 따라 압축되지 않은 tar 파일 자체를 아카이브에 추가하면 충분할 수 있습니다. 단일 파일에서 내용뿐만 아니라 거의 (거의) 압축하고 각 파일의 압축 오버 헤드를 줄입니다. 이것은 다음과 같습니다.
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
xz -dk "$x"
tar rJf combined.tar.xz "${x%.xz}"
rm -f "${x%.xz}"
done
스트림에 추가 tar 헤더가 있기 때문에 최종 압축 크기 측면에서 약간 덜 효율적이지만 모든 파일을 파일로 추출하고 다시 추가하는 데 시간이 절약됩니다. 당신은 끝낼 것 combined.tar.xz
많은 (비 압축)를 포함하는 db-*.tar
파일을.