Bash

僅從某些子目錄中刪除匹配的文件

  • March 14, 2016

我有一個包含幾個子目錄的目錄;在每一個中,我都有一些文件。我只想grep對某些子目錄執行 a 以查找與查詢匹配的文件並將其刪除;類似的東西 grep -rl --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . | rm,但我不想解析stdinfrom grep

我想我必須結合findand rm,但我不知道如何。

此外,似乎(至少在 Cygwin 中),我不能做 –exclude-dir={dir1, dir2},我必須拆分它們。這是一個小問題,但有人知道為什麼這不起作用嗎?

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每個文件執行一個。

為了--exclude-dir={dir1,dir2}工作,您需要一個支持大括號擴展的 shell,如 csh、tcsh、ksh、zsh、bash 或 fish。

引用自:https://unix.stackexchange.com/questions/269702