如何将multiline linux命令转换为一行命令

时间:2011-10-31 07:06:48

标签: mysql linux shell mysqldump

有人可以解释一下如何使用“>”和“|”在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)

4 个答案:

答案 0 :(得分:2)

GNU tar程序本身可以通常由gzip执行压缩。您可以使用-z标志来启用此功能。因此targzip可以组合成:

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。