문자열 "RUSH2112"에 대해 파일 시스템에서 여러 파일을 검색해야 합니다. 다음 명령을 완료했지만 이것이 올바른지 확실하지 않습니다. 나는 마운트된 파일 시스템에 서 있습니다.
find . -type f -exec grep -i1 "Rush2112" {} \;
답변1
하나를 찾고끈(정규식이 아님) 대소문자를 구분하지 않고 grep -iF STRING
( STRING
찾고 있는 인용 문자열이 어디에 있어야 하는지)를 사용합니다.
디렉토리 계층 구조의 모든 일반 파일을 반복하려면 다음을 수행하십시오.
find . -type f -exec grep -iF STRING /dev/null {} +
이 명령과 사용자 명령의 주요 차이점은 grep
발견된 파일 그룹에 대해 실행된다는 것입니다. 발견된 각 파일에 대해 명령이 grep
한 번 실행되며, 파일이 많으면 속도가 느려질 수 있습니다. 이것이 +
궁극적으로 차이를 만드는 것입니다.
또 다른 차이점은 grep
여러 파일로 호출되기 때문에 일치하는 항목이 발견된 파일의 경로 이름이 출력에 포함된다는 것입니다. 저기/dev/null
힘grep
이 동작은 단일 파일만 사용하는 경우 호출됩니다. 구현에 비표준(그러나 일반적인) 옵션이 있는 경우 포함 대신 grep
의 옵션을 사용할 수 있습니다.-H
/dev/null
grep
일부 구현에는 grep
help 없이 디렉토리 자체를 재귀적으로 수행하는 옵션도 있습니다 find
. 이는 일반적 -R
으로 옵션을 통해 수행됩니다.
grep -R -iF STRING .
GNU에는 이 옵션과 약간 다른 옵션 grep
도 있습니다 (사용할 경우 심볼릭 링크를 따르지 않아 런타임을 통해 얻은 동작과 더 유사하게 모방됩니다 ) .-r
-R
-r
grep
find . -type f
찾고 있는 것이 해당 문자열을 포함하는 파일의 경로 이름이고 일치하는 파일의 실제 행이 아닐 수도 있는 경우 다양한 방법으로 이 작업을 수행할 수 있습니다(위에서 언급한 것과 유사한 방식으로 모두 동일함). )).
grep -q
각 파일에 대한 테스트 로 사용됩니다 .find . -type f -exec grep -qiF STRING {} ';' -print
grep -l
다음을 통해 찾은 파일 그룹 전체에서 사용됩니다find
.find . -type f -exec grep -ilF STRING {} +
재귀를 사용하십시오
grep -l
.grep -R -ilF STRING .
주어진 문자열을 포함하는 파일을 추가로 처리하려면 첫 번째 대안을 선택하겠습니다.
find . -type f -exec grep -qiF STRING {} ';' -exec sh -c '
for pathname do
# Process "$pathname" here
done' sh {} +
또는 grep
인라인 스크립트 내에서 수행하십시오.
find . -type f -exec sh -c '
for pathname do
if grep -qiF STRING "$pathname"; then
# Process "$pathname" here
fi
done' sh {} +
관련된: