특정 하위 디렉터리에서 일치하는 파일만 제거

특정 하위 디렉터리에서 일치하는 파일만 제거

여러 개의 하위 디렉터리가 있는 디렉터리가 있습니다. 각 하위 디렉터리에는 몇 가지 파일이 있습니다. 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파일당 하나씩 실행된다는 의미입니다.

작업 하려면 --exclude-dir={dir1,dir2}csh, tcsh, ksh, zsh, bash 또는 Fish와 같은 중괄호 확장을 지원하는 셸이 필요합니다.

관련 정보