출력을 리디렉션하는 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
(이 경우 |gzip
stdout이 tar
에 대한 파이프이기 때문입니다 gzip
).
v
요청한 자세한 출력(파일 목록)은 v
오류 메시지처럼 stderr에 표시됩니다. 왜냐하면 gzip
stdout에 file 에 들어가는 것과 같은 방식으로 나타날 수 없기 때문입니다 tar.gz
. 또한 유일한 2> error.log
리디렉션이 있다는 점에 유의하세요.gzip
stderr
자세한 파일 목록이 필요하지 않은 경우(내 생각에는산출), v
및 에 대한 stderr
모든 오류 메시지 (및 셸에서 열린 출력 파일)를 로그 파일로 이동하려면 하위 셸 또는 명령 그룹을 리디렉션하세요.cd
tar
gzip
(cd /ebs/datatop &&
tar cf - . | gzip > /ebs/backup/proddata.tar.gz) 2>> error.log
또한 현재 디렉토리를 아카이브 *
로 교체했습니다 . 숨겨진 파일이 아닌 파일로만 확장되며 일부 파일 이름에 문제가 발생합니다..
*
error.log
이전 파일은 현재 작업 디렉토리에 저장됩니다 cd
. 귀하의 접근 방식에 따라 이는 결국 파일 error.log
에 저장됩니다 .tar.gz
v
해당 파일 목록( 또는 사용)을 특정 파일로 리디렉션하고 오류를 다른 파일로 리디렉션하려면 vv
flags 이외의 -
인수를 사용해야 합니다 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>&1
stdout을 파이프로 리디렉션하기 전에 이미 파일 설명자 3을 파이프로 리디렉션했기 때문에) 더 이상 stdout에 아카이브를 보내라고 ../file.list
지시하지 않으므로 쓰기 파일을 자유롭게 나열할 수 있습니다. 표준 출력으로(로 리디렉션됨 )tar
tar
../file.list