我正在尝试 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 days
或date -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
,不需要第二次执行此操作。