我的电脑上有很多无损音乐。不幸的是,有时(现在很少)它们会损坏,我不得不用外部硬盘的备份替换它们。
备份是手动完成的,这当然很乏味。随着我的音乐收藏不断增多,手动查找哪张专辑未存档变得越来越困难。
对于这种情况,最佳解决方案是什么?简单地cp
-ing?一些rsync
用法?我不想更新现有文件 - 它们几乎不会改变,而且我不想删除损坏文件的好文件。
答案1
我衷心推荐rsync
。它可以自动检测目标上与源相比缺少哪些文件,并仅复制它们。 IIUC,它是适合您的用例的最佳解决方案。在你的情况下cp
是没用的,因为它总是会复制所有文件并且会比rsync
.如果您了解其rsync
工作原理,那么它将被证明是在任何情况下复制大量数据的最佳解决方案。
rsync
请注意,如果您决定将来通过网络使用,则必须在源计算机和目标计算机上安装它。这是我所知道的唯一缺点rsync
。
编辑:
rsync
用法非常简单。通常它可以归结为以下命令:
$ rsync -avz <SOURCE> <DESTINATION>
-a
表示存档模式 - 递归复制目录并重新创建符号链接,保存权限,修改时间,组ownerhsip,所有者,-v
表示详细,-z
表示压缩
下载时,临时文件名前面带有.
.下次相同的命令将仅运行已在本地更改的文件,并且出现的新文件DESTINATION
将从下载DESTINATION
到SOURCE
。
rsync
它很容易使用ssh
:
$ rsync -avz -e ssh hosting:/home1/rkumvbrh/mail/drabczyk.org/arkadiusz .
-e ssh
可以省略,因为 ssh 是默认的:
$ rsync -avz hosting:/home1/rkumvbrh/mail/drabczyk.org/arkadiusz .
通过网络使用时,rsync
必须在两端安装:
$ rsync -avz -e "ssh" router:<FILE> .
ash: rsync: not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.0]
编辑:
好吧,起初我以为您想用外部磁盘中的文件替换本地磁盘上损坏的所有文件,并从外部磁盘复制所有新文件。但是,如果您只想将新文件从内部磁盘复制到外部磁盘,则必须添加--ignore-existing
选项,以便将新文件复制到外部磁盘,但损坏的文件不会:
$ rsync -avz --ignore-existing <PATH/TO/INTERNAL_HDD> <PATH/TO/EXTARNAL_HDD>
从man rsync
:
--ignore-existing 这告诉 rsync 跳过更新目标上已存在的文件(这不会忽略现有目录,否则什么也不会完成)。另请参阅--现有。
This option is a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and thus it doesn't affect deletions. It just limits the files that the receiver requests to be transferred. This option can be useful for those doing backups using the --link-dest option when they need to continue a backup run that got interrupted. Since a --link-dest run is copied into a new directory hierarchy (when it is used properly), using --ignore existing will ensure that the already-handled files don't get tweaked (which avoids a change in permissions on the hard-linked files). This does mean that this option is only looking at the existing files in the destination hierarchy itself.
答案2
在 rsync 命令中添加 -c 将确保两侧的每个文件都相同。