grep
出力をrm
にパイプしようとしていますが、役に立たないものを出力します。 rm
にスイッチは必要ですか?または、rm
に正規表現を直接指定できますか?
ls | grep '^\[Daruchini'| rm
rm:オペランドがありません詳細については、「rm --help」を試してください。
標準入力をxargs
の引数に変換するには、rm
を使用する必要があります。
$ ls | grep '^Dar' | xargs rm
(ファイル名の特殊文字に注意してください。GNU grepを使用すると、
$ ls | grep -Z '^Dar' | xargs -0 rm
)
また、シェルは正規表現を使用しませんが、これは単純なパターンです。
$ rm Dar*
(その間、私はもっと睡眠が必要だと思います。)
grep
の出力を空白ではなく改行で区切る場合は、-d
オプションを使用してxargs
に指定できます。
$ ls | grep '^Dar' | xargs -d '\n' rm
( this 質問で説明されています)
引数として出力を渡すには、xargsに慣れていないため、whileループを使用する傾向があります。
ls | grep '^Dar' | while read line; do rm "$line";done;
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」は使用できません。
私にとって最高のコマンドは:
find ./Daruchini* -exec rm {}\;