我正在使用 scp 在我的网络上的服务器之间移动文件,如下所示...
scp /folder/file user@<ip address>/User/Documents/Transfer
...但是我不想覆盖重复的文件。有没有办法重命名目标文件夹中已被使用的文件?
例如,如果目标文件夹中已经存在 file.txt,则新文件file1.txt
将被重命名为file1-1.txt
,后续版本将是file1-2.txt
等等。其他操作系统也提供保留两个文件的选项。
文件名的格式并不严格,我只是不想在传输之前手动重命名文件,也不想丢失重要数据。
答案1
我相信您无法scp
独自完成此操作。最好的办法是使用rsync
overssh
以及以下附加选项:
--backup --suffix=_`date +"%m%d%Y_%H%M"` --backup-dir=DIR
手册页中的一些相关部分rsync
:
-b, --backup
With this option, preexisting destination files are renamed as each file is
transferred or deleted. You can control where the backup file goes and what
(if any) suffix gets appended using the --backup-dir and --suffix options.
--suffix=SUFFIX
This option allows you to override the default backup suffix used with the
--backup (-b) option. The default suffix is a ~ if no --backup-dir was speci-
fied, otherwise it is an empty string.
--backup-dir=DIR
In combination with the --backup option, this tells rsync to store all backups
in the specified directory on the receiving side. This can be used for incre-
mental backups. You can additionally specify a backup suffix using the --suf-
fix option (otherwise the files backed up in the specified directory will keep
their original filenames).
这应该能够根据您的需要进行调整。下面是一个基本测试,您无疑会添加其他选项,包括 ssh:
rsync -av --backup --suffix=_`date +"%m%d%Y_%H%M"` --backup-dir=backup test1/ test2/
因此,有了这个:
- 文件从 传输
test1
到test2
- 如果此文件已存在于
test2
,但传输的文件是更新,“远程”文件已更新,重要的是: - 原始文件
test2
备份到,test2/backup
并添加增量日期和时间后缀
很酷吧?我猜想这正是你正在寻找的。请注意,我使用了相对的备份目录的路径,绝对路径也可以使用...