仅复制新文件-这可能吗?基本上想合并两个文件夹


14

我在驱动器1上有一个名为Music的文件夹,它是100GB。我在驱动器2上有一个名为Music的文件夹,它是116GB。这是最新版本。如何将音乐文件夹从驱动器2复制到驱动器1,而不必重写每个文件?


您正在使用哪个版本的OS X?
尼克斯

1
我正在使用10.7.4。当我将文件夹从一个驱动器复制到另一个驱动器时,询问我是否要替换。没有合并选项。
达伦2012年

Answers:


5

仅当您正在复制(而不是移动)文件夹时,合并选项才会显示。option将新文件夹拖到旧文件夹的位置时,请确保按住。另外,使用+ c复制新文件夹,并使用+ v粘贴在旧文件夹上,可以让您选择合并文件。


这似乎仍然覆盖不需要重写的文件。使用rsync代替
BRogers

即使可以使用合并选项,它有时也不起作用(仅报告错误却不执行任何操作)-特别是在您的情况下使用大文件夹的情况下。这是您应该使用rsync的另一个原因。
Andrzej Martyna

24

这是rsync的经典用例:

rsync -av /source-path/source-dir /destination-path

rsync只会将新文件和更改过的文件复制到新位置。

重要的是要理解源参数后面的斜杠是如何起作用的。如果后面有斜杠,那么/ source-path / source-dir的内容将被复制到destination-path。如果没有尾部斜杠,那么source-dir本身将被复制到目标,并且其内容将在目标层次结构中再向下一层。

因此,如果要将一条路径复制到另一条路径,请在结尾加上斜杠,如下所示:

rsync -av /sourcepath/sourcedir/ /duplicatpath/sourcedir/

1
很棒的收获!如果您是从多个驱动器(或计算机上的任何位置)执行此操作,并且不想键入目录,则只需拖动一个驱动器(外部USB或时间胶囊)或一个特定目录,然后添加它给你的命令。只要将目标定位到终端
BRogers

伙计,非常感谢您提出结尾的斜线。我花了很多时间思考为什么rsync -av ./foo/bar / vol1 / foo / bar复制所有现有文件。血腥斜杠大声笑!!!
sming

4

更新

首先,首先安装coreutils。运行brew install coreutils。如果尚未brew安装,请切换回Windows!

检查cp --version输出版本cp (GNU coreutils) 8。^^

然后您将拥有正确的cp版本,并且该-u标记将起作用。


检查cp命令。使用man cp并阅读选项。您可以执行以下操作:

cp -r -u ~/source ~/destination

-R,-r,-recursive:递归复制目录
-u,-update:仅当SOURCE文件比目标文件新或缺少目标文件时才复制
-p与--preserve = mode,ownership相同,timestamps
-v --verbose:解释正在做什么

因此,如果您要从“ 下载” /“音乐”文件夹中复制文件以说“ 音乐/新”文件夹,则可以执行以下操作: 这将合并这两个文件夹的内容,并且如果存在两个具有相同名称和路径的文件,它将保留基于时间戳的最新消息。
cp -ruvp ~/Downloads/music/* ~/Music/new/


您确定-u选项可与OSX中的cp命令一起使用吗?我在Sierra中收到消息“ cp:非法选项-u”。似乎并非所有命令都与Linux中的命令相同。
OMA

尝试使用cp --help命令,查看该选项是否可用。或检查cp --version并确保它是最新的。我正在使用:cp(GNU coreutils)8.27
drew7721

遗憾的是,-u在OS X上不是cp的有效标志。使用它非常方便!
质疑阿隆森(Aronsson)

不幸的是,这个答案是不正确的。
威廉·塞尼乌克'19

用于brew install coreutils获取正确的cp版本。
drew7721

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.