将文件复制到远程主机并重命名的脚本

将文件复制到远程主机并重命名的脚本

我正在尝试编写一个 Shell 脚本,该脚本可以 tar 文件并将其从主机 A 复制(scp?)到特定目的地的远程主机 B /foo,并将其重命名为我们使用的特定时间格式,比如 YYYY-MM -DD。

现在,要添加此功能,假设有一个文件foo.txt在特定日期从主机 A 复制到主机 B 上的路径,这当然是由脚本完成的。现在,如果此脚本在同一天运行两次,则该脚本必须识别主机 B 上已存在的版本,而不是覆盖远程主机 B 上的现有文件,并且必须在文件上附加时间戳,而不是覆盖它假设被“1”复制,因此将其复制为不同的文件。

例如,如果foo.txt远程主机 B 上已存在该文件,则从主机 A 运行的脚本应将该文件重命名为foo.txt.1并将其复制到远程主机 B 上的同一路径上。

因为它只是一个文件,所以我可以通过 rsync 使用 SCP。

答案1

如果我很好地理解您的请求,您只需要一个 rsync 选项:(--backup-b)。

看一下 rsync 手册页:

-b,--备份
使用此选项,在传输或删除每个文件时,将重命名预先存在的目标文件。您可以使用以下命令控制备份文件的位置以及附加什么后缀(如果有)--备份目录- 后缀选项。

因此,如果您计划将文件传输foo.txt到文件夹/foo, from Host1to Host2,您的命令可以是:

rsync -b --suffix=".$(date +%Y-%m-%d)" -e "ssh -p $SSH_SERVER_PORT" foo.txt remoteuser@Host2:/foo/foo.txt  

每次将文件“ foo.txt”复制到 上时Host2,您都会得到一个新文件“ foo.txt.YYYY-MM-DD”。
考虑使用该选项--backup-dir将文件的所有备份版本保留在同一位置。

  • 请注意:由于您选择的后缀,每个文件每天只有 1 个备份副本。如果您想保留“所有”备份副本,请考虑使用另一个后缀选项(日期+%Y-%m-%d_%H%M%s可能是一个主意)

相关内容