두 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-10
2013년 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 파일을 가져옵니다. 원하는 결과를 얻으려면 출력을 파이프해야 합니다.tar
xargs
cpio
--format=ustar
gzip
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
시간 매개변수에 대한 자세한 내용은 매뉴얼 페이지를 확인하세요.
고쳐 쓰다:-mtime
Anthon이 제안한 대로 +/- 수정자를 사용하여 -not
. 예는 다음과 같습니다.
find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2
d, h, m, s
에 해당 하는일, 시간, 분그리고두번째각기. 그러면 5d2h3m10s
다음보다 최신이거나 오래된 파일이 제공됩니다 .4d0h15m20s