Answers:
我自己遇到了这个问题,内置cp
命令实际上可以处理它。
我发现了一堆旧的CF卡,我想从中提取图片。我的处理脚本将查看文件mtime,以将其放置在正确的位置,因此我需要保留它。
从手册页:
-p Cause cp to preserve the following attributes of each source file in the copy: modification time,
access time, file flags, file mode, user ID, and group ID, as allowed by permissions. Access
Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
served.
If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
is not altered.
If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
ID bit is not preserved in the copy's permissions. If the source file has its set-group-ID bit
on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
missions. If the source file has both its set-user-ID and set-group-ID bits on, and either the
user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
served in the copy's permissions.
因此,使用zsh
我能够运行(NO NAME
作为我的卡卷名称):
cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics
我相信特殊/**/*
构造是ZSH特有的;但是你可以做类似的事情
find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path
cp -p
明了的方法,可以保留修改后的时间(可能是文件中三个时间戳中最有用的时间),并且不需要创建中间存档文件。
cp -p
从HFS +复制到FAT32时不起作用。
我使用rsync进行这种复制。但是请注意,Apple提供的版本是2.6.9,并且存在此错误。因此,您需要让第三方构建一个自己构建或通过包管理器构建的第三方
例如
rsync -aE source_dir target_dir
该选项-E
复制ACL并-a
保留UNIX权限和时间。(好吧,它在rsync 2上做了rsync 3似乎需要-AX)
rsync
还可以设置为不安装驱动器而复制到远程计算机。
rsync
是一个很好的解决方案,但请注意,它不会保留访问时间。pax
(请参阅下面的答案)。
man rsync
并搜索preserve times
:)⇒马克的答案是正确的。
-t
。该错误可能也存在于Mavericks和Yosemite中。
使用pax
。默认pax
格式称为ustar,保留文件修改和访问时间(以及其他信息,例如用户ID,组ID,文件模式位和扩展属性,例如Spotlight注释和ACL)。有关更多详细信息,请参见此处的pax
手册页。
首先,pax
在每台Mac上创建一个存档,然后将其复制到外部硬盘驱动器,如下所示:
输入终端:
$ cd
并将要合并的文件在该Mac上的文件夹拖动到终端:
或者,您可以键入完整的文件夹名称:
$ cd /path/to/your\ folder
这会将当前文件夹更改为“您的文件夹”。
使用以下命令归档文件夹pax
:
$ cd ..
$ pax -w "your folder" > yourfolder.ustar
使用Finder将新创建的存档复制yourfolder.ustar
到外部硬盘驱动器。
然后使用以下命令提取档案pax
:
在已插入外部USB硬盘驱动器的Mac上打开终端。
cd
如上所述,使用命令将当前文件夹更改为外部硬盘驱动器上的单个文件夹层次结构:
$ cd /Volumes/externalHDD/path/to/single \folder
$ ls
yourfolder.ustar
yourfolder2.ustar
yourfolder3.ustar
提取档案:
$ pax -r -p e < yourfolder.ustar
$ pax -r -p e < yourfolder2.ustar
$ pax -r -p e < yourfolder3.ustar
$ ls
your folder
your folder 2
your folder 3
如果需要,可以使用Finder移动文件(Finder保留文件修改和访问时间在同一卷内)。
(我已经在OS X 10.8(Mountain Lion)上测试了此过程。)
使用zip压缩它们,或者使用ctrl单击或右键单击选择它们,然后选择“压缩”。将压缩文件复制到目标系统并在其中打开它们。
如果可以,请将外部驱动器格式化为Mac OS文件系统,而不是FAT。