特定のサブディレクトリから一致するファイルのみを削除する

特定のサブディレクトリから一致するファイルのみを削除する

複数のサブディレクトリがあるディレクトリがあります。各サブディレクトリにはいくつかのファイルがあります。grepクエリに一致するファイルを見つけて削除するために、特定のサブディレクトリにのみアクションを実行しgrep -rl --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . | rmたいのですが。stdingrep

合わなければならないようですが、findどうrmするのかわかりません。

また、(少なくともCygwinでは)--exclude-dir = {dir1、dir2}を実行できないため、分離する必要があります。これは小さな問題ですが、なぜこれがうまくいかないのか知っている人はいますか?

ベストアンサー1

grep -rlZ --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . |
  xargs -r0 rm -f

findディレクトリ巡回を実行するには、次の手順を実行します。

find . -type d \( -name dir1 -o -name dir2 \) -prune -o \
  -type f -exec grep -lZ HUMAN {} + |
  xargs -r0 rm -f

移植可能/標準的には次のようにする必要があります。

find . -type d \( -name dir1 -o -name dir2 \) -prune -o \
  -type f -exec grep -q HUMAN {} \; -exec rm -f {} +

ただし、これはgrepファイルごとに1つずつ実行されることを意味します。

作業には、--exclude-dir={dir1,dir2}csh、tcsh、ksh、zsh、bash、または Fish などの中括弧拡張をサポートするシェルが必要です。

おすすめ記事