Solaris에서 tar를 생성할 때 출력을 파일로 리디렉션하는 방법은 무엇입니까?

Solaris에서 tar를 생성할 때 출력을 파일로 리디렉션하는 방법은 무엇입니까?

출력을 리디렉션하는 tar.gz 파일을 생성하기 위해 Solaris에서 다음 명령을 사용하고 있습니다.

cd /ebs/datatop && tar cvf - * | gzip -c > /ebs/backup/proddata.tar.gz >> /dev/null 2>> error.log

실행하면 /ebs/backup/proddata.tar.gz빈 파일이 생성됩니다. 어떤 오류도 발생하지 않습니다. tar 파일이 로 리디렉션된다고 가정합니다 . 명령 출력이 error.log로 리디렉션되고 오류가 error.log에 기록 /dev/null되기를 원합니다 ./dev/null

답변1

출력은 tar cvf -아카이브입니다. -인수를 로 지정하면 출력 아카이브가 stdout에 있도록 f지시하는 것입니다 tar(이 경우 |gzipstdout이 tar에 대한 파이프이기 때문입니다 gzip).

v요청한 자세한 출력(파일 목록)은 v오류 메시지처럼 stderr에 표시됩니다. 왜냐하면 gzipstdout에 file 에 들어가는 것과 같은 방식으로 나타날 수 없기 때문입니다 tar.gz. 또한 유일한 2> error.log리디렉션이 있다는 점에 유의하세요.gzipstderr

자세한 파일 목록이 필요하지 않은 경우(내 생각에는산출), v및 에 대한 stderr모든 오류 메시지 (및 셸에서 열린 출력 파일)를 로그 파일로 이동하려면 하위 셸 또는 명령 그룹을 리디렉션하세요.cdtargzip

(cd /ebs/datatop &&
   tar cf - . | gzip > /ebs/backup/proddata.tar.gz) 2>> error.log

또한 현재 디렉토리를 아카이브 *로 교체했습니다 . 숨겨진 파일이 아닌 파일로만 확장되며 일부 파일 이름에 문제가 발생합니다..*

error.log이전 파일은 현재 작업 디렉토리에 저장됩니다 cd. 귀하의 접근 방식에 따라 이는 결국 파일 error.log에 저장됩니다 .tar.gz

v해당 파일 목록( 또는 사용)을 특정 파일로 리디렉션하고 오류를 다른 파일로 리디렉션하려면 vvflags 이외의 -인수를 사용해야 합니다 f. 예를 들어 다음을 지원하는 시스템에서는 이 구문을 사용합니다 /dev/fd/n.

(tar cvvf /dev/fd/3 . 3>&1 > ../file.list | gzip > ../file.tar.gz) 2> ../error.log

위에서 /dev/fd/3파이프는 여전히 참조되지만 gzip( 3>&1stdout을 파이프로 리디렉션하기 전에 이미 파일 설명자 3을 파이프로 리디렉션했기 때문에) 더 이상 stdout에 아카이브를 보내라고 ../file.list지시하지 않으므로 쓰기 파일을 자유롭게 나열할 수 있습니다. 표준 출력으로(로 리디렉션됨 )tartar../file.list

관련 정보