我正在尝试编写一个 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 Host1
to 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
可能是一个主意)