通过 scp 复制/备份除最新文件之外的所有文件

通过 scp 复制/备份除最新文件之外的所有文件

我有一个在多台机器上运行的程序,该程序正在将结果写入~/data/machine_name/,每次结果文件超过 1MB 时,程序都会继续前进并写入一个新文件。 (所有机器都有相同的目录架构)。

我想自动备份这些文件,以防其中一台机器出现故障。知道最近访问的文件是程序正在写入的文件,因此,我将复制除此文件之外的所有旧文件。下次备份作业触发时,将包括上次备份中省略的最新文件,依此类推。

现在我只使用一个简单的scp命令,它甚至复制远程计算机打开的文件。

有办法实现这个目标吗?用于此类工作的命令行实用程序或脚本?

答案1

您可以使用rsync备份实用程序和--exclude选项:

/usr/bin/rsync -avz --exclude='$EXCLUDED_DIR_OR_FILE' -e ssh /your/base/folder \
user@host_or_ip:/target/machine/path >> /optional/log/file.log

您可以$EXCLUDED_DIR_OR_FILE通过查找上次更新的文件来确定变量。有多种方法可以在给定目录中查找最后更新的文件,其中之一是一起使用lsawk实用程序:

ls -lrt | awk '{ f=$NF }; END{ print f }'

请注意,此命令打印最后修改的路径file name,而不是文件的完整路径。

相关内容