"Ubuntu"라는 단어가 포함된 전체 경로와 함께 모든 .txt 파일을 나열하는 방법. 텍스트가 아닌 파일은 무시됩니다. 값을 비교할 때 대소문자를 무시해야 합니다. 즉, UBUNTU, ubuNtu 또는 UbUnTu는 지정된 검색 구문과 동일한 것으로 간주됩니다.
답변1
GNU grep은 glob 패턴을 기반으로 한 재귀 검색을 지원합니다. 예를 들면 다음과 같습니다.
grep --include='*.txt' -ril ubuntu /path/to/dir
정규식을 검색하지 않는 경우 -F
고정 문자열 일치( )를 포함하면 이 프로세스가 훨씬 더 빨라집니다. 또 다른 최적화는 -i
필요하지 않은 경우 무시( )를 제거하는 것입니다 .
답변2
단순한find
+grep
해결책:
find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;
grep
세부 사항:
l
- 대신 일반 출력을 억제합니다. print는 일반적으로 각 입력 파일의 이름을 인쇄합니다.i
- 대소문자만 다른 문자가 서로 일치하도록 대소문자 차이를 무시합니다.
답변3
이 유틸리티의 일부 구현에는 바이너리를 무시 하는 플래그가 grep
있습니다 . 정규식 대신 대소문자를 구분하지 않는 일치 및 고정 문자열에 대한 일치를 사용할 수도 있습니다 . 따로 찾고 계시다면-I
grep
-i
-F
성격-w
일부 구현에 있는 기능을 사용해야 합니다 grep
. 그런 다음 하위 디렉터리로 재귀적으로 이동하려면 재귀를 사용하여 -R
파일을 검색하고 -l
패턴 일치가 포함된 파일 이름을 가져올 수 있습니다. 그런 다음 특정 확장자를 가진 파일만 볼 수 있는 --include
GNU가 있는 경우 이를 사용하고 싶습니다 .grep
grep -Fil -IRw --include='*.txt' 'ubuntu' /path/to/top/dir
사용된 표준 옵션: -F
, -i
, -l
.
사용된 비표준 옵션( grep
일부 구현에서 지원됨): -w
, -I
, -R
, --include
.
가 없는 find
OpenBSD를 대신 사용 합니다 (GNU 에도 이 플래그가 있습니다).grep
--include
--binary-files
-I
grep
find /path/to/top/dir -type f -name '*.txt' \
-exec grep -Fil -w --binary-files=without-match 'ubuntu' {} +
답변4
이것이 내가 일반적으로 사용하는 것입니다:
find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;