특정 날짜의 파일에서 특정 문자열을 검색하는 방법은 무엇입니까?
예를 들어, 다음과 같은 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/null
grep이 검색할 "파일"을 파일 이름 find
(있는 경우) 과 함께 추가했습니다 . 이렇게 하면 일치하는 파일이 하나만 있으면 grep
일치하는 파일 이름이 보고되도록 "강제"됩니다(/dev/null은 일치하지 않으므로 보고되지 않기 때문입니다).
출력은 파일 이름과 이러한 파일의 일치하는 행이 됩니다.
답변2
당신은 그것을 사용할 수 있습니다
find . -name 'a[123]' -ctime 6 | xargs grep -l 'JMS111'
-ctime 6
6일보다 오래된 파일을 모두 찾습니다 . 실제로 파일 생성 날짜를 명령이 실행되기 전 6*24시간과 7*24시간 사이의 24시간 기간과 비교합니다. 생성 날짜가 이 기간 내에 있고 파일 이름이 "a1", "a2" 또는 "a3"인 경우 find
파일 경로를 인쇄합니다. -ctime <n>에 지정된 기간은 find 명령이 실행되는 시간을 기준으로 하기 때문에 내일 find 명령을 실행하는 경우 오늘 find 명령을 실행하는 경우와 다른 값을 사용해야 합니다.
참고: find 를 사용하는 경우 -ctime -6
find 는 6일 이하의 파일 이름을 인쇄하고 find 는 -ctime +6
6일 이상의 파일 이름을 인쇄합니다. 또한 일부 find 버전에서는 6시간 동안 6h와 같이 측정 단위를 지정할 수 있습니다.
-mtime
생성 시간 대신 수정 시간을 검색하려는 경우에 작동합니다.
을 사용하여 xargs
실행을 쉽게 확인할 수 있습니다 grep
. 또한 기본 데이터베이스에 grep을 넣으면 -exec
find는 발견된 각 파일에 대해 한 번 호출하고 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