특정 날짜의 특정 문자열에 대한 파일을 검색하는 방법은 무엇입니까?

특정 날짜의 특정 문자열에 대한 파일을 검색하는 방법은 무엇입니까?

특정 날짜의 파일에서 특정 문자열을 검색하는 방법은 무엇입니까?

예를 들어, 다음과 같은 3개의 파일이 있습니다.

'a1' dated: 20 Feb,
'a2' dated 21 Feb,
'a3' dated 22 Feb.

이제 'JMS111'과 같은 특정 문자열에 대해 날짜 = '2월 21일'인 모든 파일을 검색하고 싶습니다.

나는 성공하지 않고 다음 명령을 시도했습니다.

ls -lt |grep 'JMS111' -ctime 2019/02/21 
find -name '*.xml' -type f -printf '%Tw:%h/%f\0' | grep 'JMS111'

답변1

이 문제를 해결하는 한 가지 방법은 찾고 있는 날짜를 대괄호로 지정하도록 타임스탬프 파일을 설정하는 것입니다.

touch -t 201902210000 /tmp/start-time
touch -t 201902212359.59 /tmp/end-time

...그런 다음 find시작 시간보다 새로운 파일을 요청하지만아니요종료 시간 이후:

find . -type f  -newer /tmp/start-time  ! -newer /tmp/end-time

함께 넣어보세요:

touch -t 201902210000 /tmp/start-time
touch -t 201902212359.59 /tmp/end-time
find . -type f -newer /tmp/start-time  ! -newer /tmp/end-time -name '*.xml' -exec grep JMS111 /dev/null {} +
rm /tmp/start-time /tmp/end-time

그러면 이름이 올바른 시간 범위로 끝나는 파일을 찾은 다음 .xml해당 파일 이름을 grep한 번에 최대한 많이 전달합니다. /dev/nullgrep이 검색할 "파일"을 파일 이름 find(있는 경우) 과 함께 추가했습니다 . 이렇게 하면 일치하는 파일이 하나만 있으면 grep일치하는 파일 이름이 보고되도록 "강제"됩니다(/dev/null은 일치하지 않으므로 보고되지 않기 때문입니다).

출력은 파일 이름과 이러한 파일의 일치하는 행이 됩니다.

답변2

당신은 그것을 사용할 수 있습니다

find . -name 'a[123]' -ctime 6 | xargs grep -l 'JMS111'

-ctime 66일보다 오래된 파일을 모두 찾습니다 . 실제로 파일 생성 날짜를 명령이 실행되기 전 6*24시간과 7*24시간 사이의 24시간 기간과 비교합니다. 생성 날짜가 이 기간 내에 있고 파일 이름이 "a1", "a2" 또는 "a3"인 경우 find파일 경로를 인쇄합니다. -ctime <n>에 지정된 기간은 find 명령이 실행되는 시간을 기준으로 하기 때문에 내일 find 명령을 실행하는 경우 오늘 find 명령을 실행하는 경우와 다른 값을 사용해야 합니다.

참고: find 를 사용하는 경우 -ctime -6find 는 6일 이하의 파일 이름을 인쇄하고 find 는 -ctime +66일 이상의 파일 이름을 인쇄합니다. 또한 일부 find 버전에서는 6시간 동안 6h와 같이 측정 단위를 지정할 수 있습니다.

-mtime생성 시간 대신 수정 시간을 검색하려는 경우에 작동합니다.

을 사용하여 xargs실행을 쉽게 확인할 수 있습니다 grep. 또한 기본 데이터베이스에 grep을 넣으면 -execfind는 발견된 각 파일에 대해 한 번 호출하고 find는 xargs파일 목록을 수신하여 find의 단일 호출에 전달합니다 grep. 자원 밀도가 낮습니다.

한 가지 단점은 -ctime파일이 생성된 이후의 일수를 계산해야 한다는 것인데 다음을 실행하여 이를 알아낼 수 있습니다.

find . -ctime n | xargs ls -l

관심 있는 날짜가 포함된 파일이 나타날 때까지.

...좋아요를 삭제할 필요도 없습니다 -newer.

답변3

아래 스크린샷을 참조하세요.

여기에 이미지 설명을 입력하세요.

특정 문자열을 포함하고 특정 날짜에 생성된 파일을 나열해야 합니다. 이를 위해 다음 명령을 실행할 수 있습니다.

  • sudo 조회. -type f -newermt 2020-10-06 -exec grep -l "test" {} \;

위 명령은 "test"라는 문자열을 포함하는 10월 6일에 생성된 파일을 나열합니다. 아래 스크린샷을 참조하세요.

여기에 이미지 설명을 입력하세요.

첫 번째 스크린샷에서는 3개의 파일을 볼 수 있습니다. 그 중 두 개(test.scala 및 text2.txt)에는 "test"라는 문자열이 포함되어 있지만 생성 날짜가 다릅니다. 두 번째 스크린샷에서는 "test"라는 문자열을 포함하고 10월 6일에 생성된 파일이 나열되어 있는 것을 볼 수 있습니다.

답변4

이것은 작동합니다:

$ grep -e JMS111 *20190221*.txt

관련 정보