rsync 除了“最后一个”文件

rsync 除了“最后一个”文件

我有一台Linux每 10MB 进行日志轮换的服务器。我想将完成的文件全部scprsync部分存储到远程存储。

是否可以rsync持续接收最新文件,这样rsync在新的日志文件轮换后就会发生这种情况?

我的文件命名例如:

trace_00003_20190207134624.pcap
trace_00004_20190207144533.pcap
trace_00005_20190207154446.pcap

因此在这种情况下trace_00005_20190207154446.pcap会被主动写入并且不应该被捕获rsync

答案1

如果您可以更改日志原始文件的名称,那么您可以轻松完成此操作。我假设您使用 logrotate 来轮换日志文件。

  1. 配置您的应用程序以使用不同的结尾保存日志文件,例如.pcap.current
  2. .pcap配置 logrotate在旋转时重命名文件
  3. rsync 仅同步以以下格式结尾的文件.pcap

无需使用任何查找或其他过滤器的技巧。

答案2

我会进行实验find,看看你是否可以保留 15 分钟内更新的文件。例如:

# only rsync files older than 15 minutes
rsync -av $(find /var/pcap_dir/ -type f -mmin +15 | xargs) /tmp/dest/

我确实记得一次处理的文件数量有限制,xargs所以你可能需要查一下。如果我没记错的话,这个数量已经达到数千个,所以处理少量文件应该没问题。此外,文件名中的空格或 shell 元字符可能会搞砸事情,所以一定要使用 shell 安全的文件名。

编辑:或者只是传输一个脚本(未经测试)

#!/bin/bash
# myscript.sh find files 15 minutes old, or older. tar them up with bzip2 compression
find /var/pcap_dir/ -type f -mmin +15 | xargs tar cfj /tmp/results.tbz --files-from -

然后远程运行脚本将 tarball 拉到本地机器:

scp myscript.sh remotehost:/tmp/
ssh remotehost "/tmp/myscript.sh"
scp remotehost:/tmp/results.tbz /tmp/
ssh remotehost "rm -f /tmp/results.tbz"

答案3

对于以您的示例命名的文件,此代码将允许您对除最新文件之外的所有文件执行任何操作 - 但要小心,因为在随机文件组中它可能匹配的不仅仅是最后一个文件。

for file in `ls | grep -v \`ls -ltr | tail -1 | awk '{ print $9 }'\``; do  echo $file; 
done

此示例仅打印出名称;用 rsync 命令替换 echo $file。

测试:

[pt@NDC1ASCEM2DES1 test]$ ll
total 0
-rw-r--r-- 1 pt868x sysadmin 0 Feb 20 17:00 trace_00005_20190207154446.pcap
-rw-r--r-- 1 pt868x sysadmin 0 Feb 20 17:00 trace_00003_20190207134624.pcap
-rw-r--r-- 1 pt868x sysadmin 0 Feb 20 17:01 trace_00004_20190207144533.pcap
[pt@NDC1ASCEM2DES1 test]$ for file in `ls | grep -v \`ls -ltr | tail -1 | awk '{ print $9 }'\``; do  echo $file; done
trace_00003_20190207134624.pcap
trace_00005_20190207154446.pcap
[pt@NDC1ASCEM2DES1 test]$ for file in `ls | grep -v \`ls -ltr | tail -1 | awk '{ print $9 }'\``; do  rsync  $file NDC1ASCEM2DES2:$file; done
pt@ndc1ascem2des2's password:
pt@ndc1ascem2des2's password:
[pt@NDC1ASCEM2DES1 test]$ ssh ndc1ascem2des2 "ls"
pt@ndc1ascem2des2's password:
trace_00003_20190207134624.pcap
trace_00005_20190207154446.pcap

答案4

你的问题有点模棱两可。我来解释一下:
选项 1:备份所有大于或等于 10MB 的文件。
选项 2:备份所有文件除了具有最新时间戳的那个。

我假设你指的是选项 1:选项 1 答案。
你可以使用寻找命令抓取每个大于 10MB 的文件并将该文件发送到scp/rcp命令。 注意
find path -type f -size +10M -exec scp {} destination \;
\;在最后。别忘了!
选项 2 答案。
在 csh 中测试过这个 &狂欢
ls -rt [path]/[file_wildcard] | sed '$d' | xargs -i rm -f {}

相关内容