나는 특정 문자열을 포함하고 있으며 지난 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
로 연결된 출력은 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)
...where는 **
하위 디렉터리와 재귀적으로 일치합니다. 여기서 .D
in은 (.Dmm-2)
"일반 파일( .
)만 일치하고 숨겨진 파일( D
)은 일치하지 않음"을 의미하며 where mm-2
는 "지난 2분 동안 수정됨"을 의미합니다.