如何将整个目录复制到同名目录中而不替换目标目录中的内容?(相反,我想添加到目标文件夹的内容)
如何将整个目录复制到同名目录中而不替换目标目录中的内容?(相反,我想添加到目标文件夹的内容)
Answers:
如果只想更新原始目录中的较新文件,或者跳过目标中已经存在的所有文件,请使用rsync
和传递。-u
--ignore-existing
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(请注意/
源代码方面的:如果没有,rsync
则会创建/remote/directory/directory
。)
--ignore-existing
添加而不替换,您会看到什么数据丢失?
rsync
容易使用,这将无济于事。...(例如Win32-OpenSSH)
--rsync-path
需要第三方软件包)
如果您具有文件写入权限,scp将覆盖这些文件。
换句话说:您可以scp
通过临时删除文件的写许可权来有效地跳过它们(如果您是文件的所有者)。
scp -r user@server.com:/location/of/files/* /local/location/
您只能按日期复制新文件。采用find
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
如果可以将目标文件的内容设置为只读:
find . -type f -exec chmod a-w '{}' \;
在运行之前scp
(它会抱怨并跳过现有文件)。
然后再将其更改(chmod +w
以获取基于umask的值)。如果文件并非都根据您的umask拥有写权限,则您将不得不以某种方式存储这些权限,以便可以还原它们。
(如果在本地,Gilles的答案会覆盖现有文件,如果它们是较新的,我会丢失有价值的数据。不明白为什么这个错误和有害的答案会有如此之多的票数)。
rsync --ignore-existing
导致您丢失数据的?
find: missing argument to '-exec'
使用此命令时出现错误,而不得不使用:find . -type f -exec chmod a-w {} \;
。我的Linux不好,ymmv。
find . -type f -exec chmod a-w {} \;
我有一个类似的任务,在我来说,我不能用rsync
,csync
因为我的存储只有SFTP,或保险丝。rsync
无法更改文件的日期和时间,其他一些实用程序(如csync
)向我显示了其他错误:“ 无法创建临时文件,检测到时钟偏斜 ”。
如果您有权访问存储服务器-只需在此处作为守护程序安装openssh-server
或启动rsync
。
就我而言-我无法做到这一点,解决方案是:lftp。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
要复制一大堆文件,将它们焦油化的速度更快。通过使用-k,还可以防止tar在目标系统上解压缩文件时覆盖文件。
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
实现此目的的另一种方法是ls
在目标文件夹上执行以下操作:
在远程目标文件夹上:
ls | awk '{print "mv " $1 " ../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