web-dev-qa-db-ja.com

'ls -R |を実行する方法はありますかgrep "aname" * | rm;複数のディレクトリ内の複数のファイルを削除するには

エメラルドをインストール(コンパイル)しました。コマンドmake uninstallは機能しませんでした(単なるスクリプトであるため、makefileはありません)。そこで、手動でファイルを削除することにしました。しかし、多くのファイルがありました。

いくつか試してみましたが、うまくいきませんでした。そこで私はここに来てアドバイスを求めました。

  • 表示ファイルディレクトリに追加できるls -R | grep blabla*のコマンドがあります(ファイル名のみを表示します)
  • 本当のls -R | grep bla* | rmはありますか?
6
Cyclic

「aname」がファイル名の開始部分である場合、現在のディレクトリから:

find -name "aname" -delete 

ところで:

grep "bla"* somewhere

grepはすでに部分一致を行っているため、ほとんど常にfalseです。つまり、単にbla、blafasel、およびxyblaを見つける

grep bla somewhere

誤解のため、回答の古い部分を削除しました。

現在のディレクトリから、すべてのファイルでWord 'aname'を検索する場合は、次を使用できます。

find -exec grep "aname" {} ";" -delete 
6
user unknown

探しているのは、xargsfind、およびrmの組み合わせです。

findは、条件に一致するすべてのファイルのリストを作成し、stdoutに書き込み(nullで終わる)、xargsにパイプされます。 xargsは、nullで終了する文字列を受け取り、rmへの引数として使用します。

find -L /path/to/dir -name "*name*" -print0 |xargs -0 -r  rm

ソース: http://linuxcommando.blogspot.com/2007/10/find-xargs-pipe.html

4
Huckle

他の回答の中間:rmプログラムを必要とせずにxargsを呼び出すことができます。実際、通常、execの代わりにfindxargsオプションを使用できます。

ファイルの大きなバッチでrmをできるだけ少ない回数呼び出すには:

find /path/to/dir -name "*name*" -exec rm {} +

ファイルごとにrmを1回呼び出すには:

find /path/to/dir -name "*name*" -exec rm {} ";"

コマンドを実行する前にディレクトリに変更するfindには、より精巧なオプションもあります。

0