zip 파일을 파이프하는 방법이 있습니까? [복사]

zip 파일을 파이프하는 방법이 있습니까? [복사]

Nginx 및 Bash와 함께 Ubuntu 16.04를 사용합니다. 나는 그것이 불가능하다는 것을 안다.곧장데이터를 zip.

예를 들어 Apache/Nginx 웹 서버에서 웹 사이트를 호스팅하는 경우 비밀번호를 입력하면 이 명령 세트가 실패합니다.

drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip"

최종 파일을 zip 파일로 만들고 싶다면 해결 방법은 무엇입니까?

답변1

대체 압축 도구를 사용하고 있다면 거의 동일한 대안을 사용해 보세요.

drt="/var/www/html"
mysqldump -u root -p --all-databases | gzip >"$drt/db-$date.gz"

원하는 경우 또는 gzip로 바꿀 수 있으며 일반적인 확장은 또는 입니다 .bzip2xzgzbz2xz

답변2

정말로 사용하고 싶다면 zip다음을 사용할 수 있습니다.Jeff Schaller의 Shenanigans:

drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -

-그러면 내용이 데이터베이스 덤프인 파일이 포함된 ZIP 파일이 생성됩니다 . 이것은 맨페이지에 언급되어 있습니다 zip:

zip또한 압축할 파일 이름으로 단일 대시("-")를 허용합니다. 이 경우 표준 입력에서 파일을 읽어 zip이 다른 프로그램에서 입력을 받을 수 있도록 합니다. 예를 들어:

tar cf - . | zip backup -

다음을 사용할 수도 있습니다 /dev/stdin.

mysqldump -u root -p --all-databases | zip -FI "$drt/db-$date.zip" /dev/stdin

이로 인해 아카이브에 이름이 지정된 파일이 포함되어 dev/stdin올바르게 처리하기가 더 어려울 수 있습니다. -표준 입력 또는 출력을 사용하도록 프로그램에 지시하는 일반적인 약어입니다. 이는 쉘이 처리하는 것이 아니며 각 개별 프로그램에서 지원해야 합니다.

두 경우 모두 이를 사용하여 데이터를 추출하고 싶을 것입니다 funzip. 이는 아카이브의 첫 번째 구성원을 표준 출력으로 추출합니다.

답변3

만약 너라면진짜gzip또는 다음을 사용하는 대신 zip 파일을 사용하는 것이 좋습니다 tar.

drt="/var/www/html"
scratch="$(mktemp)"
if mysqldump -u root -p --all-databases > "$scratch"; then
  zip "$drt/db-$date.zip" "$scratch"
fi
rm -f  "$scratch"

또는 임시 디렉터리를 사용하여 보다 유용한 파일 이름을 얻을 수 있습니다.

drt="/var/www/html"
scratchdir="$(mktemp -d)"
if mysqldump -u root -p --all-databases > "${scratchdir}/db-${date}.sql"; then
  zip -j "$drt/db-$date.zip" "${scratchdir}/db-${date}.sql"
fi
rm -rf "$scratchdir"

관련 정보