디스크에 트레이스를 쓰는 프로그램이 있는데 크기가 매우 커집니다. 일반적으로 다음 명령을 사용합니다.
./run output.txt
xz output.txt
output.txt를 작성하는 동안 xz를 파이프할 수 있나요?
나는 읽었다모든 파일을 gzip에서 xz로 동적으로(재귀적으로) 변환하는 방법은 무엇입니까?, 하지만 제 경우에는 작동하는지 잘 모르겠습니다.
답변1
./run
파일 인수(Unix/Linux의 규칙)를 제공하지 않고 출력을 stdout으로 인쇄하는 경우 간단히 다음을 사용할 수 있습니다.
./run | xz -c >output.txt.xz
파일 이름 인수가 필요하지만 파이프에 문제없이 쓸 수 있는 경우 다음과 같이 /dev/stdout
또는 같은 특수 장치를 사용할 수 있습니다 /dev/fd/1
(둘 다 동일해야 함).
./run /dev/stdout | xz -c >output.txt.xz
아니면 당신은 사용할 수 있습니다프로세스 교체일반적으로 bash, zsh 또는 ksh와 같은 대부분의 최신 셸에서 사용할 수 있는 는 궁극적으로 /dev/fd
동일한 작업을 수행하기 위해 배후에서 장치를 사용합니다.
./run >(xz -c >output.txt.xz)
마지막 항목도 ./run
파이프에 쓸 수 있어야 하지만 ./run
파이프에 쓰면 다른 것보다 더 잘 작동합니다.output.txt
그리고정상 작동 시 stdout으로 리디렉션됩니다. 이 경우 둘 다 stdout으로 리디렉션되면 출력이 혼동됩니다.
프로그램은 일반적으로 파이프에 쓸 수 있지만 그 중 일부는 파이프로는 불가능한 오프셋을 찾아서 출력 파일로 되감기를 원할 수 있습니다. 이 경우 임시 파일에 쓴 다음 압축하는 것이 아마도 할 수 있는 전부일 것입니다.