rsync来自Linux中多个目录的多个文件

rsync来自Linux中多个目录的多个文件

我有多个按日期命名的目录(例如: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包含在目标路径中。( ... )如果您想避免目录更改对其运行的任何脚本的其余部分有效,请将所有这些内容括在括号中。

相关内容