Any work-around to pipe zip files? [duplicate]
Clash Royale CLAN TAG#URR8PPP
up vote
2
down vote
favorite
This question already has an answer here:
How to redirect output of a program to a ZIP file? [closed]
2 answers
I use Ubuntu 16.04 with Nginx and Bash. I know that it's not possible to directly pipe data into zip
.
For example, if you host websites on Apache/Nginx webserver, this command set would fail after filling in the password:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip"
What will be your workaround if you really desire the end file to be a zip file?
pipe backup mysql zip stdout
marked as duplicate by Jeff Schaller, Stephen Kitt, DopeGhoti, don_crissti, Timothy Martin Apr 11 at 0:38
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |Â
up vote
2
down vote
favorite
This question already has an answer here:
How to redirect output of a program to a ZIP file? [closed]
2 answers
I use Ubuntu 16.04 with Nginx and Bash. I know that it's not possible to directly pipe data into zip
.
For example, if you host websites on Apache/Nginx webserver, this command set would fail after filling in the password:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip"
What will be your workaround if you really desire the end file to be a zip file?
pipe backup mysql zip stdout
marked as duplicate by Jeff Schaller, Stephen Kitt, DopeGhoti, don_crissti, Timothy Martin Apr 11 at 0:38
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
2
A workaround would be to usegzip
,bzip2
, or evenxz
instead ofzip
, and accept that Unix and Windows are different platforms with different software capabilities.
â roaima
Apr 10 at 19:42
hahaha, that's a comment with a funny part. I accept that, but workarounds can be done, sometimes, as you know.
â user9303970
Apr 10 at 19:43
2
Actually, I'm really quite serious. You're backing up MySQL databases. Why not use native compression tools?
â roaima
Apr 10 at 19:44
I know you are. I don't know gzip and I'm not sure I won't have problems uploading these to MySQL and MySQL like databases. It's not likely I'll have any problems but I'm not sure and I would prefer to stay with Zip that I know better, there is a small enough workaround, though I'm open togzip
or anything working slightly with these databases anyway.
â user9303970
Apr 10 at 19:46
add a comment |Â
up vote
2
down vote
favorite
up vote
2
down vote
favorite
This question already has an answer here:
How to redirect output of a program to a ZIP file? [closed]
2 answers
I use Ubuntu 16.04 with Nginx and Bash. I know that it's not possible to directly pipe data into zip
.
For example, if you host websites on Apache/Nginx webserver, this command set would fail after filling in the password:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip"
What will be your workaround if you really desire the end file to be a zip file?
pipe backup mysql zip stdout
This question already has an answer here:
How to redirect output of a program to a ZIP file? [closed]
2 answers
I use Ubuntu 16.04 with Nginx and Bash. I know that it's not possible to directly pipe data into zip
.
For example, if you host websites on Apache/Nginx webserver, this command set would fail after filling in the password:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip"
What will be your workaround if you really desire the end file to be a zip file?
This question already has an answer here:
How to redirect output of a program to a ZIP file? [closed]
2 answers
pipe backup mysql zip stdout
edited Apr 10 at 19:57
Jeff Schaller
31.1k846105
31.1k846105
asked Apr 10 at 19:33
user9303970
116224
116224
marked as duplicate by Jeff Schaller, Stephen Kitt, DopeGhoti, don_crissti, Timothy Martin Apr 11 at 0:38
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Jeff Schaller, Stephen Kitt, DopeGhoti, don_crissti, Timothy Martin Apr 11 at 0:38
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
2
A workaround would be to usegzip
,bzip2
, or evenxz
instead ofzip
, and accept that Unix and Windows are different platforms with different software capabilities.
â roaima
Apr 10 at 19:42
hahaha, that's a comment with a funny part. I accept that, but workarounds can be done, sometimes, as you know.
â user9303970
Apr 10 at 19:43
2
Actually, I'm really quite serious. You're backing up MySQL databases. Why not use native compression tools?
â roaima
Apr 10 at 19:44
I know you are. I don't know gzip and I'm not sure I won't have problems uploading these to MySQL and MySQL like databases. It's not likely I'll have any problems but I'm not sure and I would prefer to stay with Zip that I know better, there is a small enough workaround, though I'm open togzip
or anything working slightly with these databases anyway.
â user9303970
Apr 10 at 19:46
add a comment |Â
2
A workaround would be to usegzip
,bzip2
, or evenxz
instead ofzip
, and accept that Unix and Windows are different platforms with different software capabilities.
â roaima
Apr 10 at 19:42
hahaha, that's a comment with a funny part. I accept that, but workarounds can be done, sometimes, as you know.
â user9303970
Apr 10 at 19:43
2
Actually, I'm really quite serious. You're backing up MySQL databases. Why not use native compression tools?
â roaima
Apr 10 at 19:44
I know you are. I don't know gzip and I'm not sure I won't have problems uploading these to MySQL and MySQL like databases. It's not likely I'll have any problems but I'm not sure and I would prefer to stay with Zip that I know better, there is a small enough workaround, though I'm open togzip
or anything working slightly with these databases anyway.
â user9303970
Apr 10 at 19:46
2
2
A workaround would be to use
gzip
, bzip2
, or even xz
instead of zip
, and accept that Unix and Windows are different platforms with different software capabilities.â roaima
Apr 10 at 19:42
A workaround would be to use
gzip
, bzip2
, or even xz
instead of zip
, and accept that Unix and Windows are different platforms with different software capabilities.â roaima
Apr 10 at 19:42
hahaha, that's a comment with a funny part. I accept that, but workarounds can be done, sometimes, as you know.
â user9303970
Apr 10 at 19:43
hahaha, that's a comment with a funny part. I accept that, but workarounds can be done, sometimes, as you know.
â user9303970
Apr 10 at 19:43
2
2
Actually, I'm really quite serious. You're backing up MySQL databases. Why not use native compression tools?
â roaima
Apr 10 at 19:44
Actually, I'm really quite serious. You're backing up MySQL databases. Why not use native compression tools?
â roaima
Apr 10 at 19:44
I know you are. I don't know gzip and I'm not sure I won't have problems uploading these to MySQL and MySQL like databases. It's not likely I'll have any problems but I'm not sure and I would prefer to stay with Zip that I know better, there is a small enough workaround, though I'm open to
gzip
or anything working slightly with these databases anyway.â user9303970
Apr 10 at 19:46
I know you are. I don't know gzip and I'm not sure I won't have problems uploading these to MySQL and MySQL like databases. It's not likely I'll have any problems but I'm not sure and I would prefer to stay with Zip that I know better, there is a small enough workaround, though I'm open to
gzip
or anything working slightly with these databases anyway.â user9303970
Apr 10 at 19:46
add a comment |Â
3 Answers
3
active
oldest
votes
up vote
4
down vote
accepted
If you really want to use zip
, you can use Jeff SchallerâÂÂs trick:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
This will create a ZIP file containing a file named -
whose contents are the database dump. This is mentioned in the zip
manpage:
zip
also accepts a single dash ("-") as the name of a file to be compressed, in which case it will read the file from standard
input, allowing zip to take input from another program. For example:tar cf - . | zip backup -
You could also use /dev/stdin
instead:
mysqldump -u root -p --all-databases | zip -FI "$drt/db-$date.zip" /dev/stdin
This would result in an archive containing a file named dev/stdin
which might be harder to handle properly. -
is a common short-hand to tell programs to use standard input or output; itâÂÂs not something that the shell handles, it has to be supported by each individual program.
In both cases youâÂÂd probably want to use funzip
to extract the data; it extracts the first member of an archive to its standard output.
.. orunzip -p
and redirect
â Jeff Schaller
Apr 10 at 20:49
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would thezip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.
â user9303970
Apr 11 at 11:33
So instead having saymysql.sql
inside the end zip I'll have-
ordev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.
â user9303970
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
 |Â
show 4 more comments
up vote
8
down vote
If you are open to alternative compression tools, try this almost identical alternative.
drt="/var/www/html"
mysqldump -u root -p --all-databases | gzip >"$drt/db-$date.gz"
If you prefer you can substitute gzip
with bzip2
or xz
, and the typical extension from gz
to bz2
or xz
.
xz
is often better thanbzip2
these days. Both are slow to compress, butxz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.
â Peter Cordes
Apr 10 at 21:11
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
add a comment |Â
up vote
3
down vote
If you really prefer a zip file over using gzip
or 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"
Optionally, you can use a temporary directory to have a more useful filename:
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"
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
3
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.
â DopeGhoti
Apr 10 at 20:17
1
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.
â DopeGhoti
Apr 10 at 20:27
My only suggestion here would be to chain the mysqldump, zip, and rm together with&&
â Jeff Schaller
Apr 10 at 20:37
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive ifmysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.
â DopeGhoti
Apr 10 at 20:40
add a comment |Â
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
If you really want to use zip
, you can use Jeff SchallerâÂÂs trick:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
This will create a ZIP file containing a file named -
whose contents are the database dump. This is mentioned in the zip
manpage:
zip
also accepts a single dash ("-") as the name of a file to be compressed, in which case it will read the file from standard
input, allowing zip to take input from another program. For example:tar cf - . | zip backup -
You could also use /dev/stdin
instead:
mysqldump -u root -p --all-databases | zip -FI "$drt/db-$date.zip" /dev/stdin
This would result in an archive containing a file named dev/stdin
which might be harder to handle properly. -
is a common short-hand to tell programs to use standard input or output; itâÂÂs not something that the shell handles, it has to be supported by each individual program.
In both cases youâÂÂd probably want to use funzip
to extract the data; it extracts the first member of an archive to its standard output.
.. orunzip -p
and redirect
â Jeff Schaller
Apr 10 at 20:49
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would thezip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.
â user9303970
Apr 11 at 11:33
So instead having saymysql.sql
inside the end zip I'll have-
ordev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.
â user9303970
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
 |Â
show 4 more comments
up vote
4
down vote
accepted
If you really want to use zip
, you can use Jeff SchallerâÂÂs trick:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
This will create a ZIP file containing a file named -
whose contents are the database dump. This is mentioned in the zip
manpage:
zip
also accepts a single dash ("-") as the name of a file to be compressed, in which case it will read the file from standard
input, allowing zip to take input from another program. For example:tar cf - . | zip backup -
You could also use /dev/stdin
instead:
mysqldump -u root -p --all-databases | zip -FI "$drt/db-$date.zip" /dev/stdin
This would result in an archive containing a file named dev/stdin
which might be harder to handle properly. -
is a common short-hand to tell programs to use standard input or output; itâÂÂs not something that the shell handles, it has to be supported by each individual program.
In both cases youâÂÂd probably want to use funzip
to extract the data; it extracts the first member of an archive to its standard output.
.. orunzip -p
and redirect
â Jeff Schaller
Apr 10 at 20:49
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would thezip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.
â user9303970
Apr 11 at 11:33
So instead having saymysql.sql
inside the end zip I'll have-
ordev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.
â user9303970
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
 |Â
show 4 more comments
up vote
4
down vote
accepted
up vote
4
down vote
accepted
If you really want to use zip
, you can use Jeff SchallerâÂÂs trick:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
This will create a ZIP file containing a file named -
whose contents are the database dump. This is mentioned in the zip
manpage:
zip
also accepts a single dash ("-") as the name of a file to be compressed, in which case it will read the file from standard
input, allowing zip to take input from another program. For example:tar cf - . | zip backup -
You could also use /dev/stdin
instead:
mysqldump -u root -p --all-databases | zip -FI "$drt/db-$date.zip" /dev/stdin
This would result in an archive containing a file named dev/stdin
which might be harder to handle properly. -
is a common short-hand to tell programs to use standard input or output; itâÂÂs not something that the shell handles, it has to be supported by each individual program.
In both cases youâÂÂd probably want to use funzip
to extract the data; it extracts the first member of an archive to its standard output.
If you really want to use zip
, you can use Jeff SchallerâÂÂs trick:
drt="/var/www/html"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
This will create a ZIP file containing a file named -
whose contents are the database dump. This is mentioned in the zip
manpage:
zip
also accepts a single dash ("-") as the name of a file to be compressed, in which case it will read the file from standard
input, allowing zip to take input from another program. For example:tar cf - . | zip backup -
You could also use /dev/stdin
instead:
mysqldump -u root -p --all-databases | zip -FI "$drt/db-$date.zip" /dev/stdin
This would result in an archive containing a file named dev/stdin
which might be harder to handle properly. -
is a common short-hand to tell programs to use standard input or output; itâÂÂs not something that the shell handles, it has to be supported by each individual program.
In both cases youâÂÂd probably want to use funzip
to extract the data; it extracts the first member of an archive to its standard output.
edited Apr 10 at 20:44
answered Apr 10 at 20:27
Stephen Kitt
140k22305365
140k22305365
.. orunzip -p
and redirect
â Jeff Schaller
Apr 10 at 20:49
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would thezip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.
â user9303970
Apr 11 at 11:33
So instead having saymysql.sql
inside the end zip I'll have-
ordev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.
â user9303970
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
 |Â
show 4 more comments
.. orunzip -p
and redirect
â Jeff Schaller
Apr 10 at 20:49
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would thezip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.
â user9303970
Apr 11 at 11:33
So instead having saymysql.sql
inside the end zip I'll have-
ordev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.
â user9303970
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
.. or
unzip -p
and redirectâ Jeff Schaller
Apr 10 at 20:49
.. or
unzip -p
and redirectâ Jeff Schaller
Apr 10 at 20:49
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would the
zip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.â user9303970
Apr 11 at 11:33
I must say I'm still confused about why it must be a named pipe and not a regular pipe, I mean, why would the
zip
utility developers care if use an anonymous or a named pipe. Maybe there isn't a clear answer to that question.â user9303970
Apr 11 at 11:33
So instead having say
mysql.sql
inside the end zip I'll have -
or dev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.â user9303970
Apr 11 at 11:34
So instead having say
mysql.sql
inside the end zip I'll have -
or dev/stdin
with the sql data. That's a tiny bit depressing but I might need to eat more non depressing foods like Chocolate, to handle that.â user9303970
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
It can be a regular pipe, if you use a hyphen.
â Stephen Kitt
Apr 11 at 11:34
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
I didn't figure it out from the answer. : my apologies.
â user9303970
Apr 11 at 11:35
 |Â
show 4 more comments
up vote
8
down vote
If you are open to alternative compression tools, try this almost identical alternative.
drt="/var/www/html"
mysqldump -u root -p --all-databases | gzip >"$drt/db-$date.gz"
If you prefer you can substitute gzip
with bzip2
or xz
, and the typical extension from gz
to bz2
or xz
.
xz
is often better thanbzip2
these days. Both are slow to compress, butxz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.
â Peter Cordes
Apr 10 at 21:11
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
add a comment |Â
up vote
8
down vote
If you are open to alternative compression tools, try this almost identical alternative.
drt="/var/www/html"
mysqldump -u root -p --all-databases | gzip >"$drt/db-$date.gz"
If you prefer you can substitute gzip
with bzip2
or xz
, and the typical extension from gz
to bz2
or xz
.
xz
is often better thanbzip2
these days. Both are slow to compress, butxz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.
â Peter Cordes
Apr 10 at 21:11
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
add a comment |Â
up vote
8
down vote
up vote
8
down vote
If you are open to alternative compression tools, try this almost identical alternative.
drt="/var/www/html"
mysqldump -u root -p --all-databases | gzip >"$drt/db-$date.gz"
If you prefer you can substitute gzip
with bzip2
or xz
, and the typical extension from gz
to bz2
or xz
.
If you are open to alternative compression tools, try this almost identical alternative.
drt="/var/www/html"
mysqldump -u root -p --all-databases | gzip >"$drt/db-$date.gz"
If you prefer you can substitute gzip
with bzip2
or xz
, and the typical extension from gz
to bz2
or xz
.
edited Apr 10 at 22:03
answered Apr 10 at 20:04
roaima
39.5k545106
39.5k545106
xz
is often better thanbzip2
these days. Both are slow to compress, butxz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.
â Peter Cordes
Apr 10 at 21:11
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
add a comment |Â
xz
is often better thanbzip2
these days. Both are slow to compress, butxz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.
â Peter Cordes
Apr 10 at 21:11
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
xz
is often better than bzip2
these days. Both are slow to compress, but xz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.â Peter Cordes
Apr 10 at 21:11
xz
is often better than bzip2
these days. Both are slow to compress, but xz
decompresses faster and often gets a better compression ratio (tukaani.org/xz claims 15% better than bzip2) It uses LZMA2 like 7-zip.â Peter Cordes
Apr 10 at 21:11
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
@Peter ah yes. I'd mentioned it in my original comment (under the question) but omitted to include it here. Good reminder, thanks.
â roaima
Apr 10 at 22:05
add a comment |Â
up vote
3
down vote
If you really prefer a zip file over using gzip
or 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"
Optionally, you can use a temporary directory to have a more useful filename:
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"
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
3
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.
â DopeGhoti
Apr 10 at 20:17
1
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.
â DopeGhoti
Apr 10 at 20:27
My only suggestion here would be to chain the mysqldump, zip, and rm together with&&
â Jeff Schaller
Apr 10 at 20:37
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive ifmysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.
â DopeGhoti
Apr 10 at 20:40
add a comment |Â
up vote
3
down vote
If you really prefer a zip file over using gzip
or 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"
Optionally, you can use a temporary directory to have a more useful filename:
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"
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
3
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.
â DopeGhoti
Apr 10 at 20:17
1
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.
â DopeGhoti
Apr 10 at 20:27
My only suggestion here would be to chain the mysqldump, zip, and rm together with&&
â Jeff Schaller
Apr 10 at 20:37
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive ifmysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.
â DopeGhoti
Apr 10 at 20:40
add a comment |Â
up vote
3
down vote
up vote
3
down vote
If you really prefer a zip file over using gzip
or 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"
Optionally, you can use a temporary directory to have a more useful filename:
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"
If you really prefer a zip file over using gzip
or 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"
Optionally, you can use a temporary directory to have a more useful filename:
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"
edited Apr 10 at 21:15
answered Apr 10 at 20:13
DopeGhoti
40.1k54779
40.1k54779
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
3
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.
â DopeGhoti
Apr 10 at 20:17
1
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.
â DopeGhoti
Apr 10 at 20:27
My only suggestion here would be to chain the mysqldump, zip, and rm together with&&
â Jeff Schaller
Apr 10 at 20:37
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive ifmysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.
â DopeGhoti
Apr 10 at 20:40
add a comment |Â
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
3
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.
â DopeGhoti
Apr 10 at 20:17
1
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.
â DopeGhoti
Apr 10 at 20:27
My only suggestion here would be to chain the mysqldump, zip, and rm together with&&
â Jeff Schaller
Apr 10 at 20:37
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive ifmysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.
â DopeGhoti
Apr 10 at 20:40
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
The name scratch is a must here?
â user9303970
Apr 10 at 20:16
3
3
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.
mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.â DopeGhoti
Apr 10 at 20:17
No, that's just my default stand-in variable name for a "scratch file", i. e. one written to and discarded after use.
mktemp
creates a new file with a random name, so you need to capture that name to a variable if you want to actually do anything to it with a script. Helpfully, it outputs the path to the created file, which is why varname="$(mktemp)" works.â DopeGhoti
Apr 10 at 20:17
1
1
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.â DopeGhoti
Apr 10 at 20:27
mktemp
is guaranteed to create a new file which does not already exist. Sanity checking for existing procedural file names are left as an exercise for the OP as they are beyond the scope of the question at hand.â DopeGhoti
Apr 10 at 20:27
My only suggestion here would be to chain the mysqldump, zip, and rm together with
&&
â Jeff Schaller
Apr 10 at 20:37
My only suggestion here would be to chain the mysqldump, zip, and rm together with
&&
â Jeff Schaller
Apr 10 at 20:37
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive if
mysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.â DopeGhoti
Apr 10 at 20:40
The scratch file would need to be removed either way, but I have added a sanity check to only create the archive if
mysqldump
succeeds. As to the complaint about renaming the scratch file, keep in mind that using a defined name was a retrofit of the earlier example in case the filename actually matters.â DopeGhoti
Apr 10 at 20:40
add a comment |Â
2
A workaround would be to use
gzip
,bzip2
, or evenxz
instead ofzip
, and accept that Unix and Windows are different platforms with different software capabilities.â roaima
Apr 10 at 19:42
hahaha, that's a comment with a funny part. I accept that, but workarounds can be done, sometimes, as you know.
â user9303970
Apr 10 at 19:43
2
Actually, I'm really quite serious. You're backing up MySQL databases. Why not use native compression tools?
â roaima
Apr 10 at 19:44
I know you are. I don't know gzip and I'm not sure I won't have problems uploading these to MySQL and MySQL like databases. It's not likely I'll have any problems but I'm not sure and I would prefer to stay with Zip that I know better, there is a small enough workaround, though I'm open to
gzip
or anything working slightly with these databases anyway.â user9303970
Apr 10 at 19:46