파일 내용을 재귀적으로 검색하여 수정 날짜별로 정렬하여 표시합니다.

파일 내용을 재귀적으로 검색하여 수정 날짜별로 정렬하여 표시합니다.

다음 기준을 모두 만족하는 파일 검색을 설정하려고 합니다.

  1. 와일드카드 문자가 포함된 디렉터리에서 반복적으로 검색합니다(예: /home/user/level_1/*/level_3/*/level_5/ ... "level_5" 및 모든 하위 디렉터리에서 검색해야 함).
  2. 파일 내용 검색(예: "파일의 텍스트")
  3. 검색할 파일 이름을 정의합니다(예: script.js)(아마도 #1과 결합될 수 있을까요?)
  4. 검색 문자열의 경로 및 컨텍스트와 함께 결과 표시(예: /home/user/level_1/level_2/level_3/level_4/level_5/script.js Here is the text in file... 정확한 형식은 다를 수 있지만 이 정보가 포함되어야 합니다. 타임스탬프는 필요하지 않습니다. 전체 경로가 표시되지 않고 표시된 디렉터리만 표시되는 경우 위의 예에서는 추가적인 이점이 있지만 level_2필수는 아닙니다.)
  5. 파일 수정 날짜를 기준으로 가장 오래된 것부터 최신 것까지 정렬된 결과를 표시합니다.

아래에는 요구 사항 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: ). DGNU처럼 숨겨진 한정자를 찾으려면 grepqualifiers 를 추가하세요 -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

:h55가 필요한 곳은 어디 입니까?h전자헤드구성요소( /home/user/level_1/level_2in) /home/user/level_1/level_2/and/more...:tt에어안에( 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()형식 사용).

관련 정보