Pipe
管道 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 文件,您的解決方法是什麼?
如果你真的想使用
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"
如果您願意,您可以替換
gzip
為bzip2
orxz
,以及從gz
tobz2
or的典型副檔名xz
。