특정 날짜 사이에 파일을 scp/tar로 만드는 방법은 무엇입니까?

특정 날짜 사이에 파일을 scp/tar로 만드는 방법은 무엇입니까?

두 Suse 서버 간에 데이터베이스 로그 파일을 복사해야 합니다. 2013년 3월 10일에서 2013년 3월 13일 사이의 파일에만 관심이 있습니다.

파일을 복사하기 전에 압축해야 하므로 tar 및 scp를 사용합니다. 현재 저는 tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-102013년 3월 10일부터 현재까지의 모든 파일을 제공하는 데 이를 사용하고 있습니다. 하지만 모두 필요하지는 않습니다. tar 스위치를 찾지 못했습니다.

답변1

Bichoy가 지적한 것처럼 이 find명령을 사용하면 특정 액세스, 생성 및 수정 시간이 있는 파일을 찾을 수 있습니다. 그러나 -mtime은 24시간 단위로 오프셋되며 특정 "일" 전에 무언가를 원하지 않는 한 계산하기가 항상 편리한 것은 아닙니다. -daystart이것을 하루의 시작 부분에 "반올림"과 결합 해야 합니다 .

귀하의 경우 더 편리한 것은 날짜 문자열을 사용하는 -newermt 옵션이라고 생각합니다 (대부분의 -newerXY 버전과 같은 참조 파일 이름 대신)

find-print0이름에 공백이 있는 파일을 처리하고 선택적으로 -type f관심 있는 기간 동안 디렉터리를 가져오지 않는 옵션 과 이것을 결합합니다.

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz 

여기에는 큰 문제가 있습니다. 발견된 파일 수가 너무 길어지면 xargs해당 명령은 무제한이 아닌 명령줄의 인수를 수용하기 위해 필요한 만큼(이 경우) 호출됩니다. 이를 방지하기 위해 나는 항상 표준 입력에서 파일 이름을 읽는 를 사용합니다. 인수를 사용하여 POSIX tar 파일을 가져옵니다. 원하는 결과를 얻으려면 출력을 파이프해야 합니다.tarxargscpio--format=ustargzip

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | cpio --create --null  --format=ustar \
   | gzip > /tmp/saas_archive_logs.tar.gz

답변2

명령 을 확인하여 find무게를 측정해야 하는 파일 목록을 얻을 수 있습니다. 일반 -atime, -btime, -mtime... 매개변수와 매개변수 조합을 사용하여 시작 및 종료 날짜(초 단위)를 지정할 수 있습니다 -not. 그런 다음 출력을 xargs, 로 파이프할 수 있습니다 tar. find시간 매개변수에 대한 자세한 내용은 매뉴얼 페이지를 확인하세요.

고쳐 쓰다:-mtimeAnthon이 제안한 대로 +/- 수정자를 사용하여 -not. 예는 다음과 같습니다.

find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2

d, h, m, s에 해당 하는일, 시간, 분그리고두번째각기. 그러면 5d2h3m10s다음보다 최신이거나 오래된 파일이 제공됩니다 .4d0h15m20s

관련 정보