stdout/pipe로 cp를 사용할 수 있나요?

stdout/pipe로 cp를 사용할 수 있나요?

좋아요, 이상하게 들릴 수도 있지만 참아주세요. cp블록 장치의 내용을 복사하고 파이프를 통해 즉시 gzip압축하고 싶습니다. 이것을 만드는 데 사용할 수 있나요 cp? 할 수 있다는 것을 알고 있지만 dd처음부터 이와 같은 파이프라인을 만드는 것이 가능한지 알고 싶었습니다 cp.

답변1

일반적인 상황에서는 표준 출력이 기록되지 않기 cp때문에 사용할 수 없지만 다음을 사용할 수 있습니다 .cpcat

cat device-file | gzip -c >some-output-file

이 경우 권한이 없는 사용자의 셸 세션에서 장치에 액세스하려면 cat접두사 또는 유사한 명령이 필요할 수 있으므로 이를 사용하는 것이 좋습니다 . sudo루트 쉘에 있는 경우(이유가 무엇이든 거의 절대 아님)

gzip -c <device-file >some-output-file

작동할 것입니다.

답변2

명명된 파이프를 생성하고 여기에 장치를 복사할 수 있습니다.

mkfifo /tmp/mypipe
cp device-file /tmp/mypipe

그런 다음 gzip을 병렬로 시작하는 다른 셸을 열어 파이프에서 데이터를 읽고 출력 파일에 씁니다.

gzip </tmp/mypipe >outfile.gz

완료되면 명명된 파이프를 삭제할 수 있습니다.

rm /tmp/mypipe

관련 정보