备份 scp 中的原始文件

备份 scp 中的原始文件

我有一个远程主机,其中有一个我想用 scp 覆盖的文件。这是一个简单的

scp 'myfile.ext' '[email protected]:/bar/baz'

我还想将原始的“/bar/baz/myfile.xt”“重命名”到一个文件中,而不是用新版本覆盖它。一个简单的“/bar/baz/myfile.xt~”就足够了,但最好是一个计数器或当前日期。

有什么方法可以用 scp 做到这一点吗?

我想尽量减少“scp”调用,因为我需要始终输入交互式密码(不,我无法更改身份验证方法)

答案1

您想将原始名称重命名/bar/baz/myfile.xt/bar/baz/myfile.xt~或更好,并带有计数器或日期后缀。

您不能直接使用 执行此操作scp,但这里有一些原始命令的替代方法。

  1. 使用rsync

    rsync -ab myfile.ext [email protected]:/bar/baz
    

    -b标志指示rsync如果目标文件发生更改则进行备份。默认是追加~,但您可以更改该默认值。例如,这将使用今天的日期(如源计算机上定义的):

    rsync -ab --suffix ".$(date +'%Y%m%d')" myfile.ext [email protected]:/bar/baz
    
  2. ssh与 一起使用scp。我假设这baz是目标文件的名称,而不是要复制源文件的目录:

    ssh [email protected] 'cp -p /bar/baz /bar/baz."$(date +'%Y%m%d')"' &&
    scp -p myfile.ext [email protected]:/bar/baz
    

    如果您愿意,可以使用mv而不是cp,但这会丢失真正目标文件上的任何非标准权限和硬文件链接。

rsync选项更干净,但并不总是安装。

答案2

一定是这样吗scp?我不认为它可以为您重命名文件(除了远程复制之外,但我从来不确定它的效果如何。)

sftp会让事情变得相当简单

$ echo -e 'rename test test.old\nput test' | sftp user@hostname

您也可以使用 来完成此操作,但请注意,这不会复制任何内容,而是复制(无权限、时间戳...)ssh的数据。test

$ cat test | ssh user@hostname 'mv test "test.$(date +%F_%T)"; cat > test'

答案3

您可以使用mirrordir

Mirror ~/scripts to ~/scripts.backup:
$ mkdir ~/scripts.backup
$ mirrordir -v ~/scripts ~/scripts.backup

If you rerun mirrordir again, only the updated files are copied.

You can mirroring FTP sites:
$ mirrordir -v ftp://ftp.nixcraft.in/pub /home/backup/nixcraft.in/ftp/pub

mirrordir offers tons of option, refer mirrordir man page for more examples and options:
$ man mirrordir

相关内容