나는 지난 2분 동안 특정 문자열을 포함하는 수정된 파일을 내 홈 디렉토리에서 검색하고 있습니다. 나는 다음 명령으로 시도했습니다.
find -type d -mmin -2 -ls | grep -Ril "mystring"
작동하는 것처럼 보이지만 문자열을 포함하여 2분 전에 마지막으로 수정된 파일이 아닌 내부에 주어진 문자열이 있는 파일만 인쇄하는 것 같습니다. 명령의 첫 번째 부분이 실행되지 않은 것 같습니다.
답변1
당신의 제안으로 좋은 시도를 했습니다
find -type d -mmin -2 -ls | grep -Ril "mystring"
-type d
이는 파일( )이 아닌 지난 2분 이내에 수정된 디렉터리( )를 식별했을 것입니다 -type f
. -ls
to 의 출력을 파이핑하면 grep
일반적으로 생성된 파일 이름에서 mystring
. 그러나 이 경우 -R
플래그는 동작을 변경 grep
하고 파일 이름 목록을 무시하고 대신 현재 디렉토리와 그 아래에 있는 모든 파일을 검색합니다.
그럼 문제를 두 부분으로 나누어 보겠습니다.
홈 디렉터리에서 지난 2분 동안 마지막으로 수정된 파일을 검색하세요.
find ~ -type f -mmin -2
특정 문자열을 포함하는 [파일]
grep -Fl 'certain String' {files...}
이제 그것들을 하나로 모아야 합니다. 은 1단계 {}
에서 생성된 파일 이름에 대한 자리 표시자 find
이며 후행은 반복될 수 있음 +
을 나타냅니다.{}
여러 번, 즉 여러 파일 이름
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
grep
를 다음 으로 변경하면 명령 echo grep
에 의해 실행되는 내용이 표시됩니다 find
. 이는 유용한 디버깅 기술이 될 수 있습니다.
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
실행을 고려하여 man find
및 와 man grep
같은 다양한 옵션이 무엇인지 알아보십시오 . 그렇지 않으면 설정된 운동에서 아무것도 배울 수 없습니다. 당신은 단지 답변을 복사하고 있습니다.-F
-l
grep -Fl
답변2
셸 에서 zsh
:
grep -l -F -i 'string' ~/**/*(.Dmm-2)
... 여기서 in **
은 "일반 파일( )만 일치하지만 숨겨진 파일( ) 포함"을 의미하며, where 는 "지난 2분 이내에 수정됨"을 의미합니다..D
(.Dmm-2)
.
D
mm-2