여러 개의 하위 디렉터리가 있는 디렉터리가 있습니다. 각 하위 디렉터리에는 몇 가지 파일이 있습니다. 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
파일당 하나씩 실행된다는 의미입니다.
작업 하려면 --exclude-dir={dir1,dir2}
csh, tcsh, ksh, zsh, bash 또는 Fish와 같은 중괄호 확장을 지원하는 셸이 필요합니다.