Pipe

管道 zip 文件的任何解決方法?

  • April 10, 2018

我使用帶有 Nginx 和 Bash 的 Ubuntu 16.04。我知道不可能將數據直接通過管道傳輸到zip.

例如,如果您在 Apache/Nginx 網路伺服器上託管網站,則此命令集在填寫密碼後會失敗:

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

如果您真的希望最終文件是 zip 文件,您的解決方法是什麼?

如果你真的想使用zip,你可以使用Jeff Schaller 的技巧

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來提取數據;它將檔案的第一個成員提取到其標準輸出。

如果您對替代壓縮工具持開放態度,請嘗試這種幾乎相同的替代方法。

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

如果您願意,您可以替換gzipbzip2or xz,以及從gzto bz2or的典型副檔名xz

引用自:https://unix.stackexchange.com/questions/436849