我只需要在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开关。
正如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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句