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


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.