![如何让 scp 命令覆盖目标文件夹](https://linux22.com/image/1379146/%E5%A6%82%E4%BD%95%E8%AE%A9%20scp%20%E5%91%BD%E4%BB%A4%E8%A6%86%E7%9B%96%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我正在使用 scp 命令将一些文件复制到远程 PC,就像您使用 scp 一样:)
我注意到,scp 复制文件的默认行为是覆盖任何现有文件。现在我想复制一个文件夹,所以我基本上做了同样的事情:
scp -r <source_path> user@myOtherPc:<dest_path>
<> 中的部分是我的文件夹路径。但是当我运行此程序时,我收到消息“文件已存在”。有办法解决这个问题吗?某种强制覆盖?
谢谢,饲料
答案1
和 Levans 一样,我无法复制此操作,但您是否考虑过使用 rsync 而不是 ssh?如果您要复制大量文件,rsync 可能比 scp 更好。网上有很多不错的指南,例如:
http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html
第一个链接处理通过 cron 的自动备份,因此某些说明(例如创建没有密码的 ssh 密钥)可能与您无关。
答案2
如前所述,scp 会愉快地覆盖任何已经存在的文件。
只有当您有其他进程(例如并发 scp 进程或其他进程)将文件夹和文件写入同一目标时,才会出现“文件存在”问题。请考虑改用 rsync。
答案3
如果目标目录中已包含与要传输的源目录同名的文件,您将收到此错误消息。您不能在同一目录中拥有与目录同名的文件。
答案4
这个 rsync 命令将执行此操作:
export ssh_server=csitea.net # the domain name or ip if you want
export ssh_user=ubuntu # the ssh user to use to
export src_dir=/home/ubuntu/opt/ # the source dir
# the full path to the ssh identity file
export ssh_idty=~/.ssh/id_rsa.aws-ec2.csitea.net
export tgt_dir=/home/me/opt/ # the target dir
# Action !!!
rsync -e "ssh -l USERID -i $ssh_idty" -av -r --partial --progress --human-readable \
--stats $ssh_user@$ssh_server:$src_dir $tgt_dir
# and check the result
clear ; find $tgt_dir -type d -maxdepth 1|sort -nr| less