2011-10-31 15 views
2

「>」と「|」を使用する方法を教えてもらえますか? Linuxのコマンドで、これらの3行をコードの1行に変換してください。複数行のlinuxコマンドをコマンドの1行に変換する方法

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) 

答えて

2

GNU tarプログラム自体が正常にgzipによって行わ圧縮を行うことができます。 -zフラグを使用してこれを有効にすることができます。だから、targzipに組み合わせることができる:アーカイブ用標準入力からの読み取りにtarを取得

tar -zcf ${db}-$(date +%m-%d-%y).sql.tar.gz ${db}-$(date +%m-%d-%y).sql 

は、単純な作業ではありませんが、私は、この特定のケースではその必要性を疑問だろう。

tarの目的は、単一のアーカイブファイルにファイルの多数をパッケージ化することができることですけど、それはあなたが処理している唯一のファイル(mysqldumpから出力ストリーム)ですので、あなたはを必要としません

mysqldump blah blah | gzip > ${db}-$(date +%m-%d-%y).sql.gz 

あなたはそれを任意のファイル名を与えない場合gzipは標準出力に標準入力を圧縮しますのでです:アップそれはtarするには、あなただけのパイプもまっすぐgzip自体にすることができます。

これにより、圧縮プロセス中に(非常に大きな)一時ファイルが不要になります。 "|" あなたはについての詳細を学ぶことができ

#!/bin/sh 
USER="***" 
PASS="***" 
DB="***" 

mysqldump --user=$USER --password=$PASS $DB --single-transaction -R | gzip > ${DB}-$(date +%m-%d-%y).sql.gz 

+0

.tgzという拡張子がエラーになります。私はそれが正しいと思う.gzの権利? – Ergec

+0

@ Ergec:申し訳ありません、それはまだタールを使っていたときのcut'n'paste操作からの二日酔いでした。今修正されました。 – paxdiablo

+0

"アーカイブのために標準入力から読み込む' tar 'を取得するのは単純な作業ではありません。" - これを '/ dev/stdin'にシンボリックリンクして試しましたが、tarファイルの対応するエントリが空になっていました。 (私はほとんどうまくいきませんでした。) –

2

あなたは、次のスクリプトを使用することができますここ - http://en.wikipedia.org/wiki/Pipeline_(Unix)。私はこの構造がmysqldumpコマンドの出力をgzipコマンドの標準入力に移動させると言うことができます。つまり、あるコマンドの出力をパイプライン経由で他のコマンドの入力に接続するようなものです。

+0

これはgzipされたtarballではなく、gzipされたsqlファイルを提供します。 @ paxdiabloによれば、それは*おそらく* okですが( '* .tgz'ファイルの特定の要件があるかもしれません)。 –

+0

あなたの答えをありがとう、投票しました。 – Ergec

+0

@keith、それは私がタールを必要としないようですが、それは別の良い質問です、どのような条件でタールが必要なのでしょうか? – Ergec

0

コマンドを1行に追加するには、& &を入力します。そうすれば、失敗すると実行が停止します。各コマンドの後にセミコロンを使用することもできます。その場合、それぞれのコマンドは、前のコマンドが失敗したかどうかに関係なく実行されます。

また、tarは "z"オプション付きでgzipを実行するので、余分なコマンドは必要ありません。

Paxdiabloは、mysqldumpを直接gzipにパイプすることができます。

2

私はtarを使用する際のポイントを見ていません。ファイルは1つだけです。圧縮の場合は、gzipを明示的に呼び出します。 Tarは、複数のファイルを1つにアーカイブ/パックするために使用されます。

あなたはcammandlineは(dumpコマンドが短絡されていますが、私はあなたがそれを得るだろうと思います)する必要があります。解凍しながら、

mysqldump .... | gzip > filename.sql.gz 
関連する問題