TAR:bash 脚本中的多个目录

TAR:bash 脚本中的多个目录

我正在尝试 TAR 5 个不同目录中不到 7 天的文件。

使用 find 命令,我可以在使用此命令后找到需要 TAR 的文件:

find /opt/splunk/var/lib/splunk/firewall/db/ -type f -mtime -7
find /opt/splunk/var/lib/splunk/cb/db/ -type f -mtime -7
find /opt/splunk/etc -type f -mtime -7
find /opt/splunk/var/lib/splunk/cb/db/ -type f -mtime -7
find /opt/splunk/var/lib/wineventlog/db -type f -mtime -7

我可以在这5个目录中找到多个需要备份的文件。

如何对使用 find 命令找到的这些文件进行 TAR,并确保它只获取 7 天前的文件?完成此操作后,我想将它们打包成一个大文件,并将它们同步到远程服务器。

这是我目前在每周 cron 上运行的脚本,但它有点太多了,因为我们只需要这些目录中 7 天前的文件。

#!/bin/bash
name=$(date '+%y-%m-%d')
tar -zcf /opt/splunk/var/backups/splunkbackup$(date '+%y-%m-%d').tar.gz 
/opt/splunk/etc /opt/splunk/var/lib/splunk/firewall 
/opt/splunk/var/lib/splunk/ossec /opt/splunk/var/lib/wineventlog 
/opt/splunk/var/lib/cb
rsync -avz --remove-source-files /opt/splunk/var/backups/splunkbackup* 
svc_splkbup@HOST:/var/log/splunk/backups/indexer

答案1

根据man tar用途-T-N

-T

 find ... | tar czf XXX.tgz -T -

在哪里

  • ...是你的find选择
  • XXX.tgz你的 tar 文件
  • -T- 指示 tar 从 stdin 读取要去皮的文件

-N

-N--newer也可以使用,你首先必须生成一个7天前的文件或日期(touch -7 daysdate -7 days

 tar -czf XXX.tgz -N ref /opt/splunk/{etc,var/lib,var/lib/w}

在哪里

  • ref是您的参考文件或日期
  • /opt/splunk/{etc,var/lib,var/lib/w}将扩展到/opt/splunk/etc /opt/splunk/var/lib /opt/splunk/var/lib/w
  • 请注意,没有find

答案2

如果您使用正确的 tar 实现,这很简单:

star -c -f out.tar -find /opt/splunk/etc -type f -mtime -7

当然,您可以在-find参数后添加更多目录名称。

find这比在单独的进程中使用要快得多,因为stat(2)内部完成的调用libfind由代码使用star,不需要第二次执行此操作。

相关内容