有人可以解释一下如何使用“>”和“|”在linux命令中,请将这三行转换成一行代码吗?
mysqldump --user=*** --password=*** $db --single-transaction -R > ${db}-$(date +%m-%d-%y).sql
tar -cf ${db}-$(date +%m-%d-%y).sql.tar ${db}-$(date +%m-%d-%y).sql
gzip ${db}-$(date +%m-%d-%y).sql.tar
rm ${db}-$(date +%m-%d-%y).sql (after conversion I guess this line will be useless)
答案 0 :(得分:2)
GNU tar
程序本身可以通常由gzip
执行压缩。您可以使用-z
标志来启用此功能。因此tar
和gzip
可以组合成:
tar -zcf ${db}-$(date +%m-%d-%y).sql.tar.gz ${db}-$(date +%m-%d-%y).sql
让tar
从标准输入读取存档并不是一项简单的任务,但我会质疑它在这种特殊情况下的必要性。
tar
的意图是能够将多个文件打包成一个存档文件,但是,因为它只处理了一个文件(来自mysqldump
的输出流),你不需要 到tar
它,你可以直接将它直接导入gzip
本身:
mysqldump blah blah | gzip > ${db}-$(date +%m-%d-%y).sql.gz
这是因为gzip
会将标准输入压缩为标准输出,如果你没有给它任何文件名。
这样就不需要在压缩过程中使用任何(可能非常大的)临时文件。
答案 1 :(得分:2)
您可以使用下一个脚本:
#!/bin/sh
USER="***"
PASS="***"
DB="***"
mysqldump --user=$USER --password=$PASS $DB --single-transaction -R | gzip > ${DB}-$(date +%m-%d-%y).sql.gz
您可以详细了解“|”在这里 - http://en.wikipedia.org/wiki/Pipeline_(Unix)。我可以说这个构造将mysqldump命令的输出移动到gzip命令的标准输入,这就像你将一个命令的输出连接到其他通过管道的输入。
答案 2 :(得分:2)
我没有看到使用tar的重点:你只有一个文件,而对于压缩你可以调用gzip。 Tar用于将多个文件归档/打包为一个。
你应该是cammandline(转储命令很短,但我想你会得到它):
mysqldump .... | gzip > filename.sql.gz
答案 3 :(得分:0)
要将命令一起追加到一行,我会把&&它们之间。这样,如果一个失败,它就会停止执行它们。您也可以在每个命令后使用分号,在这种情况下,无论先前命令是否失败,每个命令都会运行。
您还应该知道tar将使用“z”选项为您执行gzip,因此您不需要额外的命令。
Paxdiablo说得好,你可以直接将mysqldump传递给gzip。