如何让 scp 命令覆盖目标文件夹

如何让 scp 命令覆盖目标文件夹

我正在使用 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

相关内容