GNU tar를 사용합니다. 파일 압축 / 압축 해제시 압축 유형을 자동 감지 할 수 있습니다. 그러나 stdin에서 아카이브를 압축 해제해야하며 압축 유형을 알 수 없습니다. 나는 tar가 다음과 같은 올바른 제안을 줄 수 있음을 알았습니다.
tar: Archive is compressed. Use -z option
그러나 tar가 해당 인수를 입력하도록 요구하지 않고 압축 옵션을 자동으로 사용하기를 원합니다 . 어떻게해야합니까? tar는 압축 유형을 이미 알고 있기 때문에 압축을 풀지 않는 이유는 무엇입니까?
고맙습니다!
개발하기는 어렵지 않았지만 지금까지는 이루어지지 않았습니다.
—
peterh December
이것이 불가능한 이유
—
Kevin Panko
tar
는 데이터를 stdin
읽은 후에야 어떤 유형의 데이터를 가지고 있는지 알 수 없기 때문에 압축 해제 프로그램을 호출하기에는 너무 늦습니다. gzip, bzip2 등을 지원합니다. 이 문제를 해결하는 것은 쉽지 않습니다 (데이터를 버퍼링해야 함). 다시 시도하도록 지시합니다.
@KevinPanko 왜 너무 늦었습니까? 아니요, 늦지 않았습니다. 그는 버퍼에서 첫 번째 4K를 읽고 압축 유형을 테스트 한 다음 (있는 경우) 프로그램을 호출합니다. 이 버퍼링은 10-20 줄의 추가 C 코드입니다.
—
peterh
어떤 데이터가 있는지 알고있는 시점에서 더 이상 간단한
—
Kevin Panko
fork()
/ exec()
메소드를 사용 하여 압축 해제 유틸리티를 통해 데이터를 파이프 할 수 없습니다 . 이 유틸리티는 stdin
파이프 에서 읽을 수 있으며 이제 첫 번째 4K가 없습니다. 데이터를 읽은 후 파이프에 다시 넣을 방법이 없습니다.
@KevinPanko : 기본적으로와 동등한 두 가지 프로세스를 수행하여 수행 할 수 있습니다
—
Ilmari Karonen
cat buffer - | gunzip
. (또는 추가적인 프로세스의 필요성을 피하기 위해 비 차단 I / O를 사용할 수도 있습니다.)