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


41

我正在使用scp命令将某些文件复制到远程PC,就像使用scp一样:)

我注意到,文件的scp副本的默认行为是覆盖任何现有文件。现在,我想复制一个文件夹,所以我基本上会做同样的事情:

scp -r <source_path> user@myOtherPc:<dest_path>

<>中的部分是我的文件夹路径。但是,当我运行此程序时,我收到消息“文件存在”。有没有解决的办法?某种强制覆盖?

谢谢,饲料


2
你能举一些例子吗?我不执行在我的系统上重现此操作。另外,您是否检查了文件权限?
Levans 2013年

如果您使用详细模式,它会为您提供任何有用的信息吗?-v。另外,您是在目标端使用绝对路径还是相对路径?我认为,如果目标文件夹已存在,它将在目标文件夹内创建源路径,而不是覆盖(testdir/testdir
2013年

2
你得到这个很奇怪。据说scp 没有noclobber ...
beroe

1
@Levans我没有检查权限,我只是看了一下,我认为你可能是正确的。我删除了目标区域中的所有内容,然后仅使用“ scp”命令并使用“ root”用户再次开始,因此我能够多次复制文件/文件夹:)...我不是100%知道我的权限问题有,但是现在我对这个问题有一个“句柄”,我可能可以
理解

1
@beroe是的,这也是我的想法...它确实使我感到困惑,但是我认为我在这里由于权限而导致某种用户错误,我还不是Linux专家:(但是我会尝试详细信息下次我遇到这样的问题以获取更多信息,谢谢。我也注意到有时您会遇到“文件夹中的文件夹”事件……但这是另一个问题:o
code_fodder

Answers:


27

如前所述,scp会愉快地覆盖任何已经存在的文件。

“文件存在”问题仅在您有一些其他过程(例如并发scp过程或其他)将文件夹和文件写入同一目标时才会发生。考虑改用rsync。


1
我只想添加:...只要您对该文件具有写权限...
SDsolar '17

但是对于文件夹,它是合并文件夹还是替换文件夹?
Dr_Hope

5

像Levans一样,我一直无法复制它,但是您是否考虑过在ssh上使用rsync?如果要复制大量文件,则rsync可能比scp更好。在线有很多不错的指南,例如:

http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html

该第一个链接通过cron处理自动备份,因此某些说明(例如创建不带密码的ssh密钥)可能与您不相关。


有趣的是,我不知道您可以通过这种方式使用rsync……只是快速浏览了手册页,看起来您可以像使用<source_path>和<user @ host的scp一样使用它: dest_path>参数。我不是100%知道那是我想要的,因为我想始终复制/覆盖而不关心目的是什么,但是仍然是一个好主意:)
code_fodder

是的,可能值得一试,因为如果文件已被更改(或文件的一部分已更改,则应将其复制到文件上,我需要仔细检查一下,我有点累了吧)现在)。
2013年

哈哈....不用担心检查它,我能做到这一点的东西......但感谢信息:)
code_fodder

啊,太酷了,我可以不再用火柴棍作为撑开眼皮的手段。;)

1
这可以工作,但是有点像用大锤拍打苍蝇。;-)
SDsolar

3

如果目标目录已经包含与您尝试传输的源目录同名的文件,则您将收到此错误消息。您不能在同一目录中拥有与目录相同名称的文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.