Linux scp命令的行为

Linux scp命令的行为,linux,Linux,我正在尝试做一个scp(在suselinux上),看到了一些我没有预料到的东西 scp -q -r /home/dir1/mydir host:/var/home/dirx/BACKUPS 如果目标主机下有/var/home/dirx/BACKUPS/mydir,我会看到该目录下的现有目录(包括修改时间)保持不变。只创建新目录 如果目标目录中存在源目录中不存在的文件,则会保留这些文件 在复制之后,我希望看到目标目录是源目录的精确副本。看起来更像是合并 这就是scp应该如何工作的吗?这是几乎所有

我正在尝试做一个scp(在suselinux上),看到了一些我没有预料到的东西

scp -q -r /home/dir1/mydir host:/var/home/dirx/BACKUPS
如果目标主机下有
/var/home/dirx/BACKUPS/mydir
,我会看到该目录下的现有目录(包括修改时间)保持不变。只创建新目录

如果目标目录中存在源目录中不存在的文件,则会保留这些文件

在复制之后,我希望看到目标目录是源目录的精确副本。看起来更像是合并


这就是scp应该如何工作的吗?

这是几乎所有系统中复制命令的标准行为。两个位置都存在的文件将导致目标使用源副本刷新。目标中不存在的文件将从源中创建/复制

仅存在于目标中的文件不会受到影响,因为删除“过时”文件不是copy/cp的工作—它无法知道什么是过时文件


如果要删除目标中的旧/过时文件,则需要一些其他工具。

另一个工具是ssh与tar的组合。如果您想完全废弃目标目录并重新创建它,这将起到作用

( cd /home/dir1/mydir && tar cf - . ) | ssh host "cd /var/home/dirx && rm -rf BACKUPS && mkdir BACKUPS && cd BACKUPS && tar xvf -"

看起来你在找rsync,而不是scp。(rsync也可以通过SSH工作。)特别是,请看--delete选项。让我看一下。谢谢,“其他工具”是rsync。