什么命令可以在 bash 中重现这个功能?
在 Finder 中选择文件,然后按 ⇧⌥ 使命令可见 (⇧⌥⌘D)。
在AppleScript中它可以作为
tell application "Finder" to duplicate selection with exact copy
更新。我用 stat 检查了出生时间。
答案1
根据本文,此功能与普通复制 (⌘D) 功能的主要区别在于保留文件所有权。普通的复制功能保留文件权限,但不保留所有权。
与此行为的最佳等效在 OSX 上是个ditto
命令。您可以简单地使用sudo ditto src dst
,它会默认保留所有内容。如果必须保留文件所有权,则需要 Sudo。如果您正在复制一个目录并且该目录dst
已经存在,您应该知道它将被合并而不是创建一个新目录dst/src
。 Ditto 还能够创建 cpio 或 zip 格式的存档,如联机帮助页中所述。
以下答案主要与其他 UNIX 系统相关,并且可能不会在某些版本的 OSX 上保留资源分支或其他特定于 HFS 的属性。
首先,我应该提到,这些命令中的任何一个都只能在以 root 身份运行时保留所有权(例如,使用sudo
或su
取决于系统。该sudo
命令存在于 OSX 上。)。当不以 root 身份运行时,大多数文件将保留它们可以保留的所有属性,但文件将归您的用户 ID 所有。
该cp -a
命令会保留尽可能多的内容,包括权限、所有权(如果是 root)、时间戳和符号链接。虽然-a
许多系统都支持它(它在 GNU 上也保留硬链接,但在 OSX 上则不然),但 POSIX 中不支持它。最接近的等效 POSIX 命令是cp -pPR
- 保留权限和所有权的相关标准选项是p
,但P
需要复制符号链接和R
复制目录。
在保留硬链接和 cp 可能无法处理的其他扩展属性的同时进行复制的最佳方法是使用 pax 命令:pax -rwpe src dstdir
。这不允许您更改源文件的名称,并且目标目录必须已经存在。它将创建一个副本作为 dstdir/src,因此为了获得理想的结果,您必须从源文件所在的目录执行此操作。
在某些系统上, pax 可能不存在,在这种情况下您可以使用 tar: tar cf - srcfiles | (cd dstdir; [sudo] tar xf -)
。关于文件名以及源目录和目标目录的相同建议适用于 pax。