나의 실패한 제안
find ./ -newerct '1 week ago' -print | grep TODO
출력이 있어야 하지만 출력이 없습니다.
파일은 다음과 같은 텍스트 파일입니다.
Lorem
% TODO check this out
Lorem ipsun
TODO와 일치하는 1주일 미만의 파일을 찾는 방법은 무엇입니까? 출력은 TODO 다음 줄이어야 합니다. Perl 솔루션은 저도 연습하고 있어서 인기가 많습니다.
답변1
이것을 변경하십시오:
find ./ -newerct '1 week ago' -print | grep TODO
이와 관련하여:
find ./ -newerct '1 week ago' -exec grep TODO {} +
아니면 이거:
find ./ -newerct '1 week ago' -print | xargs grep TODO
설명하다
grep
출력을 find
검색할 파일 목록으로 해석하지 않고 입력으로 해석합니다 . 즉, grep
일치하려고 노력하십시오.TODO
이름파일 대신콘텐츠.
grep(1)
매뉴얼 페이지 에서 :
grep은 명명된 입력 파일을 검색합니다(파일 이름이 지정되지 않거나 단일 하이픈 빼기 기호(-)가 파일 이름으로 제공되면 표준 입력이 검색됩니다).
다음 줄을 일치시키려면 TODO
:
find ./ -newerct '1 week ago' -exec grep -A1 TODO {} + | grep -v TODO
이는 GNU가 있다고 가정합니다 grep
.
답변2
당신은 그것을 사용할 수 있습니다 :
find ./ -type f -newerct '1 week ago' -exec sh -c "grep -H -A1 TODO {} | tail -1" \;
설명하다:
-type f
: 검색 패턴에 파일만 포함-exec sh -c "..."
: 검색된 모든 파일에 대해 실행...grep -H -A1 TODO {} | tail -1
:-H
파일 이름을 인쇄하고,-A1
일치하는 줄을 인쇄하고,tail -1
출력에서 첫 번째 줄(TODO를 포함하는 줄)을 삭제합니다.
답변3
이 시도
find . -type f -ctime -7 -print | grep -R "TODO" /etc/
-type f
-파일만 나열하려면 f를 입력하세요.
-ctime -7
생성된 지 7일이 지나지 않은 파일에 적용됩니다.