1

これが私のタスクのコマンドです。

find -name myname.tar
tar -xvf myname.tar
rm -r myname/*

これらの複数行のコマンドは正常に機能していますが、1行のコマンドが必要です。次に、このコマンドを使用しました。

find -name myname.tar | tar -xvf myname.tar | rm -r myname/*

このエラーが発生します:

"rm -r myname/*
rm: cannot remove `myname/*': No such file or directory "

誰かがこれで私を助けることができますか?

ありがとう

4

3 に答える 3

7

ほとんどの場合、前のコマンドがエラーなしで実行された場合に、次のコマンドを実行する方法を探しています。

  • UNIX では、通常、コマンド ライン ツールからのエラーによって、プログラムの終了ステータスが変更されます。
  • ほとんどの UNIX シェルでは、&&オペレーターは終了ステータスをチェックし、終了ステータスである場合0(OK の場合)に進みます。

だからあなたが望んでいるように見えるのは

find -name myname.tar && tar -xvf myname.tar && rm -r myname/*
于 2012-09-10T23:48:19.887 に答える
2

これを行うには、次の 2 つの一般的な方法があります。

コマンドをセミコロンで結合すると;、コマンドが次々に実行されます。

echo "Hello"; false; echo "There";
>> Hello
>> There

もう 1 つは、結合コマンドと&&

は、前のコマンドの終了コードがゼロの&&場合にのみ、次のコマンドを実行します。

echo "Hello" && false && echo "There";
>> Hello

「|」シンボルは、まったく異なることを行います。2 つのコマンドを実行しstdout、一方の標準をもう一方の標準の中に入れstdinます。(wc -wの単語数を数えますstdin。)

echo "Two Words" | wc -w
>> 2
于 2012-09-10T23:47:10.560 に答える
1

使用していたもの(|)はピアと呼ばれ、あるコマンドから別のコマンドにデータを渡します。例:

$ cat test.php | grep '<'
<?php

複数のコマンドを次々に実行するには、';'を使用できます。

echo 123; echo 456

または、コマンドを相互の成功に依存させたい場合は、「&&」を実行できます。

$ eho 123; echo 456
eho: command not found
456

$ eho 123 && echo 456
eho: command not found
于 2012-09-10T23:43:08.223 に答える