web-dev-qa-db-ja.com

rmにgrep出力を与える

grep出力をrmにパイプしようとしていますが、役に立たないものを出力します。 rmにスイッチは必要ですか?または、rmに正規表現を直接指定できますか?

ls | grep '^\[Daruchini'| rm

rm:オペランドがありません詳細については、「rm --help」を試してください。

50
CodeBladeRunner

標準入力をxargsの引数に変換するには、rmを使用する必要があります。

$ ls | grep '^Dar' | xargs rm

(ファイル名の特殊文字に注意してください。GNU grepを使用すると、

$ ls | grep -Z '^Dar' | xargs -0 rm

また、シェルは正規表現を使用しませんが、これは単純なパターンです。

$ rm Dar*

(その間、私はもっと睡眠が必要だと思います。)

61
geekosaur

ls の出力を解析しません。

ここでは、シェルに必要なファイルをフィルター処理させるのは非常に簡単です。シェルがパターンを拡張していることに注意してくださいDar*rmコマンドではありません。シェルによって実行されるパターン展開は globbing と呼ばれます。

rm Dar*

より複雑なケースでは、findコマンドを調べてください。

grepの出力を空白ではなく改行で区切る場合は、-dオプションを使用してxargsに指定できます。

$ ls | grep '^Dar' | xargs -d '\n' rm

this 質問で説明されています)

3
mherzl

引数として出力を渡すには、xargsに慣れていないため、whileループを使用する傾向があります。

ls | grep '^Dar' | while read line; do rm "$line";done;
2
Mitms

Catalina 10.15.3では、zshを使用して、改行と空白を処理する方法を次のように確認しました。

 Sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r 

つまり、「rm -0」で削除する前に、スペースなしで新しい行を変換する(tr\nから\ 0)。

また、「find -iname」が何も出力しない場合があるため、常に「find」+「grep -i」を使用します。

最後に、「yourString」に一致するファイルとフォルダーを見つけて削除します。ファイルの場合のみ、「find -type f」を指定し、rmのオプション「-r」は使用できません。

0
YvUh

私にとって最高のコマンドは:

find ./Daruchini* -exec rm {}\;
0
Bodale