일치하는 TODO를 포함하고 1주일 미만의 파일을 찾습니다.

일치하는 TODO를 포함하고 1주일 미만의 파일을 찾습니다.

나의 실패한 제안

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일이 지나지 않은 파일에 적용됩니다.

관련 정보