myname
に保存されているというディレクトリがあります。今すぐアーカイブをキャンセルし、ディレクトリ内のすべてのファイルを削除したいmyname.tar
(保存をキャンセルした後)。myname.tar
myname
上記のタスクを実行するために使用するコマンドは次のとおりです。
find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*
これらの個々のコマンドは正常に動作しますが、1行のコマンドが必要なので、次のことを試しました。
find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*
次のエラーが発生します。
"rm -r deleteme/*
rm: cannot remove `deleteme/*': No such file or directory "
私は何が間違っていましたか?
答え1
あなたが探しているシンボルは次のとおりです。制御演算子。間違ったものを使用しています。;
またはが必要です&&
。
を使用すると、;
前のコマンドが正常に終了したかどうかに関係なく、コマンドが順次実行されます。
を使用すると、&&
失敗した各コマンドは次のコマンドの実行をブロックします。
たとえば、より多くのコンテンツを読むことができます。8.1.制御演算子
答え2
man bash
Bashを使用している場合は、Bash()のマニュアルページを読み、「制御演算子」(/control operator+)を検索することをお勧めします[Enter]。
そこには、|
などのさまざまな機能が説明されています。;
&&
ただし、代わりに使用を検討することもできます;
。これにより、前の関数が成功した場合にのみ、次の関数をその順序で実行できます。つまりfind
、ファイルが見つからないと圧縮を試みません。何もない:
find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2
しかし、これはちょっとした提案です。