
2013년 3월 10일부터 2013년 3월 13일 사이의 파일에만 관심이 있는 두 수세 서버 간에 db 로그 파일을 복사해야 합니다.
복사하기 전에 파일을 압축하여 tar와 scp로 압축하는 것이 좋습니다. 현재 나는 tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10
2013년 10월 3일부터 지금까지의 모든 파일을 제공하는 것을 사용하고 있습니다. 하지만 나는 그것들이 모두 필요하지 않습니다. 그리고 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
해당 명령(이 경우 tar
)을 여러 번 호출합니다. xargs
이를 피하기 위해 나는 항상 cpio
stdin에서 파일 이름을 읽는 를 사용합니다. POSIX tar 파일을 가져오는 매개변수를 사용 --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