많은 파일에서 문자열을 검색하는 정교한 기술이 있습니까?
이 기본 기술을 사용해 보았습니다.
for i in `find .`; do grep searched_string "$i"; done;
복잡해 보이지 않으며 파일 계층 구조에서 아무것도 발견되지 않습니다.
답변1
다음 중 하나를 수행할 수 있습니다.
grep pattern_search .
# 현재 디렉토리에서 일반 grep을 실행합니다.
grep pattern_search *
# 현재 디렉토리의 모든 와일드카드 파일에 일반 grep을 사용합니다.
grep -R pattern_search .
# 현재 디렉터리에서 재귀 검색을 사용합니다.
grep -H pattern_search *
# 파일이 2개 이상일 경우 파일명을 출력합니다. '-시간'
(gnu 매뉴얼에서) 다음과 같은 다른 옵션:
--directories=action
If an input file is a directory, use action to process it. By default,
action is ‘read’, which means that directories are read just as if they
were ordinary files (some operating systems and file systems disallow
this, and will cause grep to print error messages for every directory
or silently skip them). If action is ‘skip’, directories are silently
skipped. If action is ‘recurse’, grep reads all files under each
directory, recursively; this is equivalent to the ‘-r’ option.
--exclude=glob
Skip files whose base name matches glob (using wildcard matching). A
file-name glob can use ‘*’, ‘?’, and ‘[’...‘]’ as wildcards, and \ to
quote a wildcard or backslash character literally.
--exclude-from=file
Skip files whose base name matches any of the file-name globs read from
file (using wildcard matching as described under ‘--exclude’).
--exclude-dir=dir
Exclude directories matching the pattern dir from recursive directory
searches.
-I
Process a binary file as if it did not contain matching data; this is
equivalent to the ‘--binary-files=without-match’ option.
--include=glob
Search only files whose base name matches glob (using wildcard matching
as described under ‘--exclude’).
-r
-R
--recursive
For each directory mentioned on the command line, read and process all
files in that directory, recursively. This is the same as the
--directories=recurse option.
--with-filename
Print the file name for each match. This is the default when there is
more than one file to search.
답변2
나는 사용한다:
find . -name 'whatever*' -exec grep -H searched_string {} \;
답변3
Chris Card의 답변을 바탕으로 find . -print0 | xargs -r0 grep -H searched_string
파일 이름의 공백이 올바르게 처리되도록 xargs의 조합과 함께 내 자신의 것을 사용했습니다. 명령줄에 최소한 하나의 파일 이름을 제공하도록 xargs에 지시합니다. 나는 또한 고정 문자열(정규식 없이)을 원할 때 보통 이것을 사용합니다. 조금 더 빠릅니다.-print0
-0
-r
fgrep
-exec+보다 약간 느리지 만 -exec+보다 더 널리 사용됩니다 find . -print0 | xargs -0 cmd
.find . -exec cmd {} \;
find . -exec cmd {} +
답변4
명령에 /dev/null을 추가하면 해당 문자열과 일치하는 파일 이름도 얻을 수 있습니다.
for i in `find .`; do grep searched_string "$i" /dev/null ; done;