複数のサブディレクトリがあるディレクトリがあります。各サブディレクトリにはいくつかのファイルがあります。grep
クエリに一致するファイルを見つけて削除するために、特定のサブディレクトリにのみアクションを実行しgrep -rl --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . | rm
たいのですが。stdin
grep
合わなければならないようですが、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 などの中括弧拡張をサポートするシェルが必要です。