3

簡単なことをしたいだけです。ディレクトリに次のファイルを取得しました。

AppInterface.h  baa  PEMsg.h  PluginInterface.h

次に、次のコマンドを発行します。

ls | grep -v ".h" | rm -rf

残念なことに、baa削除されません。でもこれは:

ls | grep -v ".h"

baa私が期待するように与えます。したがって、問題はrm入力の受け取り方にあると思いますが、その理由はわかりません。これを csh と bash の両方で試しました。

4

4 に答える 4

8

rm は stdin から入力を受け取らないため、ファイルのリストをそれにパイプすることはできません。

あなたが必要

 rm `ls | grep -v ".h"`

また

ls | grep -v ".h" | xargs rm -rf
于 2010-12-06T09:33:01.330 に答える
4

xargsを使用したい:

ls | grep -v ".h" | xargs rm -rf
于 2010-12-06T09:32:01.793 に答える
2

rm標準入力からファイルのリストを読み取らないため、機能していません。ファイル名のリストを にパイプすることはできませんrm

これを行う正しい方法は次のようになります

find . -maxdepth 1 -not -name '*.h' -exec rm -rf {} +

汎用性の高い検索ユーティリティを使用します。これが大変な作業のように思える場合、それは正確さの代償です。しかし、実際には、find に慣れてしまえばそれほど悪くはありません。

于 2010-12-06T12:49:55.760 に答える
1

rm引数を標準入力から取りません。おそらく探しているのは、コマンドの置換 (ここではバッククォートで示されています) です。ここでは、あるコマンドの結果を別のコマンドの引数に挿入できます。

 rm -rf `ls | grep -v ".h"`
于 2010-12-06T09:32:23.310 に答える