如何截存特定日期之间的scp / tar文件?


8

我只需要在2013年10月10日至2013年3月13日之间的两个suse服务器之间复制数据库日志文件

希望在复制之前先压缩文件,以便将它们压缩并压缩。目前,我正在使用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开关。

Answers:


12

正如Bichoy指出的那样,您可以使用该find命令来查找具有特定访问权限,创建和修改时间的文件。但是,-mtime会以24小时为增量进行偏移,除非您希望从特定数量的“天”之前得到一些东西,否则-mtime并不总是很方便地进行计算。您需要将其与-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读取文件名。使用--format=ustar用于获取POSIX tar文件的参数,在您的情况下,您需要通过管道传递输出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

我可以在使用代码时指定小时和分钟吗?
Radek

我在发表评论之前尝试过,但是...“发现:我不知道如何将'201302050000'解释为日期或时间”
Radek

@Radek简短的回答是。我将使用YYYYMMDDThhmm以便不必处理空格。长答案:man find会告诉您:时间规范被解释为GNU date的-d选项的参数,使用man date会发现... a mostly free format human readable date string ..... A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers
Anthon 2013年

@Radek感谢您指出错误,因为我无法编辑我的评论,所以我重新插入了一个新的注释,T在“天数”和“小时数”之间插入了一个。我测试和工作。不知怎的find不知道该怎么否则分割字符串(可能是因为它可以代替为yyyymmddhhmm年月日时我以为日子将需要为秒点(。 .ss),但很可能只是用于设置日期。
安森

4

您可以检查find命令以获取需要称重的文件列表。您可以指定使用正常的开始和结束日期(最多秒精度)-atime-btime-mtime...参数与组合-not参数。然后,您可以将输出通过管道传递到xargs,然后通过管道传递到tar。查看的手册页以find获取有关时间参数的详细信息。

更新: 如Anthon所建议,您可以使用+/-修饰符与-mtime一起指定周期,而无需使用-not。这是一个例子:

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

其中分别d, h, m, s对应于天,小时,分钟。这将使文件修改的时间比5d2h3m10s早于4d0h15m20s


2
参数to -mtime必须是天的偏移量,除非您在运行时间之间固定了偏移量,否则该偏移量并非总是如此。您也可以使用-mtime +X-mtime -X指定X天之前和之后的日期,而不是使用-not。
Anthon

指定绝对日期和时间的语法是什么?
Radek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.