tar 파일에 프로세스 출력 포함

tar 파일에 프로세스 출력 포함

압축된 tar 파일을 생성하고 백업을 위해 외부 서버에 업로드하는 간단한 bash 스크립트가 있습니다. 서버의 파일 외에도 mysql 데이터베이스의 일부 덤프도 포함하고 싶습니다.

디스크 공간 제약으로 인해 tar 아카이브를 생성하기 전에 더 이상 디스크의 파일에 대한 데이터베이스 덤프를 미리 생성할 수 없습니다. 내가 하고 싶은 것은 어떻게든 덤프를 tar로 직접 전송하는 것입니다.

나의 첫 번째 시도는 명명된 파이프를 생성하고 tar가 이를 읽도록 하는 것이었습니다. 덤프할 각 데이터베이스에 대해 mysqldump 프로세스에 대한 파이프를 생성합니다.

mkfifo $DB.sql
mysqldump --result-file=$DB.sql $DB &
echo $DB.sql >>$FILELIST

백업할 모든 파일 목록을 생성한 후:

tar c -P --files-from=$FILELIST | gzip | curl ...

나는 이것이 예상대로 작동하지 않는다는 것을 알았습니다. tar는 파이프의 내용을 읽는 대신 단순히 아카이브에 파이프 항목을 만듭니다.

동작을 변경하는 tar 스위치를 찾을 수 없습니다. tar가 파이프를 파일인 것처럼 읽도록 하는 방법이 있습니까? 아니면 이러한 유형의 상황을 처리할 수 있는 다른 유틸리티가 있습니까?

답변1

사용하시면 될 것 같아요퓨즈파일 시스템과 그와 유사한 것들은 이것이 원칙적으로 문제가 있고 할 수 없다는 것을 깨달았습니다.

tar출력을 원격 시스템에 출력하려면 출력을 사용해야 합니다 . 이는 출력을 정확하게 순서대로 쓸 수 있어야 함을 curl의미합니다 . tar하지만파일 tar형식아카이브의 각 구성원 앞에는 이를 설명하고 무엇보다도 구성원의 크기를 포함하는 헤더가 와야 합니다. 하지만 멤버 파일 자체의 내용을 파이프에서 가져오는 경우 tar크기를 미리 알 수 없으므로 헤더를 쓸 수 없고 파일 데이터 처리가 계속됩니다.

답변2

이것이 당신이 원하는 것인지 확실하지 않습니다. 파이프에서 읽는 것은 표준 입력에서 읽는 것을 의미합니다. 이는 표준 입력이 표시되는 tar xf -(또는 압축된) 스트림을 사용 tar xzf -하여 수행 됩니다. -표준 출력에 쓰는 것과 유사합니다: ( tar cf -또는 tar czf -).

관련 정보