相当于 OS X Finder 的 Duplicate Exactly 的 Unix 命令

相当于 OS X Finder 的 Duplicate Exactly 的 Unix 命令

什么命令可以在 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 身份运行时保留所有权(例如,使用sudosu取决于系统。该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。

相关内容