#1 楼
如果只想更新原始目录中较新的文件,请使用rsync
并传递-u
,或者使用--ignore-existing
跳过目标中已经存在的所有文件。 >(请注意/
在源代码一侧:没有rsync
会创建/remote/directory/directory
。)评论
@Anthon我不明白您的评论,也看不到chandra的回答或评论。 --ignore-existing是否添加而不替换,您会看到什么数据丢失?
–吉尔斯'所以-不再是邪恶的'
13年11月27日在9:59
抱歉,我只看了第一个示例,该示例可能会导致数据丢失(恕我直言,不是OP所要求的),如果包括--ignore-existing-data-loss应该不会发生。
–安东
13年11月27日在10:08
如果远程系统没有易于使用的rsync,这将无济于事。(例如Win32-OpenSSH)
– Gert van den Berg
16-10-25在8:00
@GertvandenBerg rsync很容易在Windows上安装,没有比SSH难。
–吉尔斯'所以-不再是邪恶的'
16-10-25在11:51
@Gilles:的确如此,但是所有选项似乎都包含Cygwin DLL ...(OpenSSH的MS端口的当前状态是,在scp上启用压缩足以破坏SCP ...)(通过Win32获得rsync功能) -OpenSSH似乎也很简单-希望随着时间的推移会有所改善)(另一个示例是Solaris 10,其中需要第三方软件包和--rsync-path
– Gert van den Berg
16-10-25在13:01
#2 楼
如果您具有对文件的写许可权,scp将覆盖它们。文件的所有者,即。)评论
谢谢你正是我要找的技巧。
–糖精
13年7月16日在21:02
确保将文件复制回去,并添加一个*。示例scp -r user@server.com:/ location / of / files / * / local / location /
–里克
15年5月27日在19:16
找 。 -type f -exec chown root:root {} \;
–ling
16年8月21日在19:58
在不常见的情况下,预计仅目录中的某些文件将被覆盖(如果未“保护”),并且文件之间的文件权限不一致,则此解决方案可能无法使用。否则,它非常简单有效。
– sancho.s ReinstateMonicaCellio
18年5月20日在12:55
要在Windows上选择所有文件,请右键单击->属性->只读
– BenJammin
'18 Sep 6'在15:17
#3 楼
如果您可以将目标文件的内容设置为只读:find . -type f -exec chmod a-w '{}' \;
,然后再运行
scp
(它将抱怨并跳过现有文件)。 >然后将其改回(chmod +w
以获取基于umask的值)。如果文件都没有根据您的umask拥有写权限,则您将不得不存储该权限,以便可以还原它们。它们是较新的,这样我就丢失了宝贵的数据。不明白为什么这个错误和有害的答案有这么多的赞成票。
评论
我不明白:rsync --ignore-existing如何导致您丢失数据?
–吉尔斯'所以-不再是邪恶的'
13年11月27日在10:01
我发现错误:使用此命令缺少“ -exec”参数,而不得不使用:find。 -类型f -exec chmod a-w {} \;。我的Linux不好,ymmv。
–wpearse
2015年4月6日在0:16
这是一个更好,更安全的答案。更改权限的正确命令如@wpearse所述:find。 -类型f -exec chmod a-w {} \;
–阿米尔
17-10-17在16:41
#4 楼
您只能按日期复制新文件。使用联机帮助中的find
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
(
-atime
是最后一次访问的时间,但原理是相同的):小时前。如果找出最近一次访问文件有24小时的时间,则会忽略任何小数部分,因此要匹配-atime n
,必须至少在两天前访问文件。 评论
+7是什么意思?
– Francis Kim
17年5月1日在13:07
@FrancisKim意味着7天前已修改。因此,此查询选择了过去7天内修改过的所有* .gz文件
–Vadim Eremeev
17年5月24日在21:34
+7实际上不是暗示7天以上吗?
–杰夫
18年3月21日在22:51
是的,它的意思是“超过7天前”。不知道谁支持这个。
– Stefan Reich
18/12/12在14:59
#5 楼
我有类似的任务,在我的情况下,我无法使用rsync
,csync
或FUSE,因为我的存储只有SFTP。 rsync
无法更改文件的日期和时间,其他一些实用程序(例如csync
)向我显示了其他错误:“无法创建检测到时钟偏斜的临时文件”。-server-只需安装
openssh-server
或在此处将rsync
作为守护程序启动。 lftp
用于同步的用法如下:lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder
-是我PC上的文件夹,/rem/folder
-是sftp://sft.domain.tld/rem/folder
。通过链接查找手册页:http://lftp.yar.ru/lftp-man.html 评论
极好!虽然它不是使用scp(作为二进制文件),而是使用sftp(作为相同的协议),但是当sftp是唯一可用的协议时,它有助于实现同步-因此没有ssh,因此也没有rsync,ls,tar或其他任何协议建议的解决方案。谢谢!顺便说一句,如果要将远程文件夹镜像到本地文件夹,只需删除“ -R”标志。
–马丁·吕格(MartinRüegg)
20年6月14日在10:59
太棒了,这对我也很有效。只是一些笔记。小心使用-R,如果不存在则删除它们(相信它类似于rsync中的--delete标志)。 / rem / folder是相对路径。因此,如果要将内容复制到基本路径,则可以执行以下操作:sftp://stf.domain.tld/; ...... / src / folder ../../
–塞恩·布雷肯里奇(Sean Breckenridge)
20-6-29在1:31
#6 楼
要复制一大堆文件,将它们压缩为tar的速度更快。通过使用-k,还可以防止tar在目标系统上解压缩文件时覆盖文件。tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
评论
它确实建立了远程连接。首先,它是源代码tar,将其通过管道连接到ssh连接,然后在远程系统上解压缩。
– huembi
16年8月22日在21:17
#7 楼
实现此目的的另一种方法是在目标文件夹上执行ls
:在远程目标文件夹上:ls | awk '{print "mv " " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
在源代码上:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
在目的地:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
评论
请不要这样做。 1.不要解析ls。 2.如果任何文件名包含->空格换行符或其他特殊字符,答案都是危险的。 3.在python脚本中硬编码for循环。由于许多原因,在运行时生成程序是困难且棘手的(即使由专业程序员完成)。生成shell脚本甚至更糟-一个糟糕的主意。
–ignis
19年6月1日在21:12
#8 楼
scp
确实会覆盖文件,并且没有任何开关可以阻止它执行此操作,但是您可以以某种方式复制内容,执行scp,然后再复制现有文件。示例:复制所有现有文件
mkdir original_files ; cp -r * original_files/
使用scp复制所有内容
scp -r user@server:dir/* ./
将原始文件复制到任何已覆盖scp的内容上:
cp -r original_files/* ./
评论
当您尝试从远程提取文件并从上次中断的地方继续时,此方法无济于事。即如果整个目的是为了节省时间。
–奥利弗·威廉姆斯(Oliver Williams)
16年1月1日在17:58
评论
是的,当有用的程序/实用程序没有一个“如果可能的话...”选项时,这很烦人!在这种情况下,“-noclobber”!