ファイルを持ってい/templates/apple
て、
- それを2つの異なる場所に置いて
- オリジナルを削除します。
したがって、AND/templates/apple
にコピーされ、その後、元のものを削除したいと思います。/templates/used
/templates/inuse
cp
これを行う最善の方法は、ですかrm
? それとも、もっと良い方法がありますか?
すべてを 1 行で実行したいので、次のようになると思います。
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
これは正しい構文ですか?
ベストアンサー1
コマンドの出力を別のコマンドに送るために (パイプ)を使用しています|
。探しているのは、&&
前のコマンドが成功した場合にのみ次のコマンドを実行する演算子です。
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
または
cp /templates/apple /templates/used && mv /templates/apple /templates/inuse
bash のコマンド演算子/区切り文字を(網羅的ではありませんが)要約すると、次のようになります。
|
は、あるコマンドの標準出力 (stdout
) を別のコマンドの標準入力にパイプ (パイプライン) します。 は、stderr
デフォルトの出力先が何であれ、そこに出力されることに注意してください。|&
stdout
あるコマンドのとを別のコマンドの標準入力にパイプしますstderr
。非常に便利で、bash バージョン 4 以降で使用できます。&&
&&
前のコマンドが成功した場合にのみ、右側のコマンドを実行します。||
||
前のコマンドが失敗した場合にのみ、右側のコマンドを実行します。;
;
前のコマンドが成功したか失敗したかに関係なく、常に右側のコマンドを実行します。set -e
が以前に呼び出されていない場合は、bash
エラーで失敗します。&
左側のコマンドをバックグラウンド ジョブとして実行し、同時に右側のコマンドも実行します (&
バックグラウンド ジョブとして実行するために で終了することもできます)。