이전 찾기 결과가 포함된 Unix Tar 명령

이전 찾기 결과가 포함된 Unix Tar 명령

4개의 파일이 있다고 가정해 보겠습니다.

a.zip created on 28 feb 2018
b.zip created on 28 feb 2018
c.zip created on 2 mar 2018
d.zip created on 2 mar 2018

2월 28일자 파일을 검색해서 tar하고 싶습니다.

find ./ -type f -ls | grep 'Feb 28' | tar -czf somefile3.tar --null -T -

그러나 이것은 작동하지 않습니다.

답변1

GNU 또는 FreeBSD find와 GNU 또는 BSD 의 경우 tar:

find . -type f -newermt 2018-02-28 ! -newermt 2018-03-01 -print0 |
  tar -cf file.tar --null -T -

(정확한 나노초 2018-02-28T00:00:00.000000000에 마지막으로 수정된 파일을 제외하고 다음 날의 파일을 포함할 수도 있습니다. 이는 파일이 사용되지 않는 한 나노초 단위의 파일 시스템에서는 거의 발생하지 않습니다. touch -t/ touch -d초 미만의 정밀 타임스탬프를 저장하지 않는 아카이브에서 생성되거나 자체적으로 추출됨)

POSIXly 및 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다(표준 tar 아카이브 형식에도 파일 이름에 대한 추가 제한이 있습니다).

touch -d 2018-02-28T00:00:00 .start
touch -d 2018-03-01T00:00:00 .end
find . -type f -newer .start ! -newer .end ! -path ./.start ! -path ./.end |
  pax -x ustar -w > file.tar

GNU 도구를 사용하여 (2018년뿐만 아니라) 2월 28일에 모든 일반 파일을 마지막으로 수정하려면 다음을 수행하십시오.

find . -type f -printf '%Tm-%Td-%p\0' |
  sed -nz 's/^02-28-//p' |
  tar -cf file.tar --null -T -

의 출력은 find -ls자동으로 안정적으로 사후 처리되지 않으며 사람이 사용할 수 있는 용도로만 만들어졌습니다.

답변2

를 사용하면 star명령줄은 다음과 같습니다.

touch -t201802280000 ref
star -c -f file.tar -find . -newer ref

참고: -newermt는 libfind.

종료 날짜도 마음에 드는 경우:

touch -t201802280000 start
touch -t201802282359.59 end
star -c -f file.tar -V pat='start!end' -find . -newer start ! -newer end

1초를 생략해야 하거나 연도가 윤년인 경우 이틀이 나올 수 있습니다.

2018년은 윤년이 아니므로 를 사용할 수 있습니다 touch -t201803010000 end.

답변3

귀하의 명령이 작동하지 않는 이유를 추가하고 싶었습니다.

find ./ -type f -ls | grep 'Feb 28' | tar -czf somefile3.tar --null -T -

find의 출력은 파일 이름 목록과 날짜와 같은 기타 정보입니다. Grep은 날짜가 일치하는 전체 행을 출력합니다. Tar에는 파일 이름만 필요하며 줄 바꿈 대신 널 바이트로 구분해야 합니다.

답변4

find가지다날짜옵션. 그거 먹어봤어?

-newermt 마지막 수정 날짜

-마지막 방문 날짜가 최신입니다.

-newerct 권한 변경 마지막 날짜

예를 들어: find . -newermt 2018-07-10 ! -newermt 2018-7-11 | xargs tar -cfv file.tar 편집하다 ~처럼찰스 더피이 문제를 방지하려면 댓글을 달아주세요. find . -newermt 2018-07-10 ! -newermt 2018-7-11 -print0 | xargs -0 tar -cfv file.tar

관련 정보