![파일 내용을 재귀적으로 검색하여 수정 날짜별로 정렬하여 표시합니다.](https://linux55.com/image/214178/%ED%8C%8C%EC%9D%BC%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EA%B2%80%EC%83%89%ED%95%98%EC%97%AC%20%EC%88%98%EC%A0%95%20%EB%82%A0%EC%A7%9C%EB%B3%84%EB%A1%9C%20%EC%A0%95%EB%A0%AC%ED%95%98%EC%97%AC%20%ED%91%9C%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음 기준을 모두 만족하는 파일 검색을 설정하려고 합니다.
- 와일드카드 문자가 포함된 디렉터리에서 반복적으로 검색합니다(예: /home/user/level_1/*/level_3/*/level_5/ ... "level_5" 및 모든 하위 디렉터리에서 검색해야 함).
- 파일 내용 검색(예: "파일의 텍스트")
- 검색할 파일 이름을 정의합니다(예: script.js)(아마도 #1과 결합될 수 있을까요?)
- 검색 문자열의 경로 및 컨텍스트와 함께 결과 표시(예:
/home/user/level_1/level_2/level_3/level_4/level_5/script.js Here is the text in file
... 정확한 형식은 다를 수 있지만 이 정보가 포함되어야 합니다. 타임스탬프는 필요하지 않습니다. 전체 경로가 표시되지 않고 표시된 디렉터리만 표시되는 경우 위의 예에서는 추가적인 이점이 있지만level_2
필수는 아닙니다.) - 파일 수정 날짜를 기준으로 가장 오래된 것부터 최신 것까지 정렬된 결과를 표시합니다.
아래에는 요구 사항 1-4를 충족하는 다음 명령이 있습니다.
grep -r --include=\script.js "text in file" /home/user/level_1/*/level_3/*/level_5/
다섯 번째 항목을 포함하는 방법에 대한 아이디어가 있나요? zsh를 사용하여 비슷한 작업을 수행하는 방법에 대한 다양한 설명을 보았지만 find
하나로 묶을 수는 없습니다.
답변1
을 사용하고 있으므로 zsh
문제가 될 수 있습니다.
grep -H 'text in file' /home/user/level_1/*/level_3/*/level_5/**/script.js(.Om)
**/
하위 디렉터리 수준을 일치시킬 때 .
한정자는 다음으로 제한됩니다.정기적인파일을 수정하고(GNU가 grep
하는 것처럼 -r
) Om
O
수정 시간을 기준으로 역순으로 정렬합니다 m
(예 ls -rt
: ). D
GNU처럼 숨겨진 한정자를 찾으려면 grep
qualifiers 를 추가하세요 -r
.
-H
-r
( 또는 같은 GNU 확장자 --include
)는 파일이 하나만 발견되더라도 파일 이름이 인쇄되도록 보장합니다 zsh
.
인쇄하려면보조 디렉토리파일 경로 외에도 GNU를 사용하여 grep
다음을 수행할 수 있습니다.
for f (/home/user/level_1/*/level_3/*/level_5/**/script.js(N.Om))
grep -H --label=${f:h5:t} 'text in file' < $f
:h5
5가 필요한 곳은 어디 입니까?h
전자헤드구성요소( /home/user/level_1/level_2
in) /home/user/level_1/level_2/and/more...
및:t
t
에어안에( level_2
).
타임스탬프를 포함하려면 zsh의 stat
내장 함수를 사용하여 검색할 수 있습니다.
zmodload zsh/stat
for f (/home/user/level_1/*/level_3/*/level_5/**/script.js(N.Om)) {
stat -LF%FT%T.%3.%z -A t +mtime $f
grep -H --label="${f:h5:t} ($t)" 'text in file' < $f
}
여기의 타임스탬프는 밀리초 정밀도의 표준 형식(예: 2022-12-01T09:30:00.895+0000)으로 명시적으로 형식화되어 있지만 원하는 대로 형식을 조정할 수 있습니다 -F
( strftime()
형식 사용).