NginxとBashでUbuntu 16.04を使用します。私はそれが不可能であることを知っています。まっすぐデータをzip
。
たとえば、Apache / Nginx WebサーバーでWebサイトをホストしている場合、パスワードを入力するとこのコマンドセットは失敗します。
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
に置き換えることができ、一般的な拡張はまたはです。bzip2
xz
gz
bz2
xz
答え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"