我有多个按日期命名的目录(例如:2017-09-05),这些目录中有来自 BRO IDS 的多个 log.gz 文件。我试图进入每个目录,并按名称仅获取特定的 log.gz 文件,然后使用 rsync 将它们发送到远程系统。日志文件如下所示:dns.00:00:00-01:00:00.log.gz
我正在尝试使用通配符来完成此操作。
前任:rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-* {dns,http}.*.log.gz / [email protected]:/home/pnlogs/
这很接近,但它只是复制每个文件夹中的所有文件并忽略我尝试获取只是http 和 dns 日志如示例中所示。这可以在一行中完成吗?有更好的方法吗?
理想情况下,我希望在传输时将文件保留在其原始目录中。例如,在我的原始命令中,目录将保留在远程系统上。这对于组织来说是件好事。有趣的是,该命令复制了 2017-09-01 和 2017-09-02 的 HTTP 和 DNS 日志,而不是本月 3 日、4 日或 5 日的日志。
我如何调整它以适应月/年的变化?这将位于脚本中,我不想每个月(即 2017-10 等)仅使用 $date 更改它?
得到这个工作:感谢所有的帮助。rsync -avhR $(date +????-??-??)/{dns,http,conn}.*.log.gz [email protected]:/home/pnlogs/
答案1
让我们看看你的命令
rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-* {dns,http}.*.log.gz / [email protected]:/home/pnlogs/
其收集源是与这四个路径匹配的所有文件(启用了递归-r
- 但实际上已经这样做了):-a
/home/data/logs/2017-09-*
dns.*.log.gz
http.*.log.gz
/
最后一个将确保该rsync
命令尝试复制所有内容。
我认为您想要复制的是 YYYY-MM-DD 文件夹内的所有 DNS 和 HTTP 日志文件,并保留目录结构:
cd /home/data/logs &&
rsync -avhR 2017-09-*/{dns,http}.*.log.gz [email protected]:/home/pnlogs/
我不会使用--ignore-existing
除非你有真强知道你想这样做的原因。 (此标志可防止rsync
重新启动部分传输。请注意,您没有,--partial
所以这可能没有实际意义。)
您不需要,-r
因为您正在使用-a
并且此存档模式已经包含递归。但如果我正确地解释了你的要求,无论如何都没有递归。
该-R
标志指示rsync
将源树的相对路径保留在目标中。我曾经cd
将命令置于一个有用的起点,因为否则您最终也会被/home/data/logs
包含在目标路径中。( ... )
如果您想避免目录更改对其运行的任何脚本的其余部分有效,请将所有这些内容括在括号中。