OSX上的cp和ditto命令有什么区别?

hri*_*ari 11 macos

我想知道OSX上的cp和ditto命令之间的确切区别是什么?

区分这两个命令的要点是什么?

vad*_*ian 10

手册页中的标题实际上描述了差异:

  • cp-复制文件和目录

  • 同上 -复制目录层次结构,创建和提取档案

手册页中的更多信息

  • cp
cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...
Run Code Online (Sandbox Code Playgroud)

将SOURCE复制到DEST,或将多个SOURCE复制到DIRECTORY。

  • 同上
ditto [-v] [-V] [-X] [<options>] src ... dst_directory.

ditto [-v] [-V] [<options>] src_file dst_file

ditto -c [-z | -j | -k] [-v] [-V] [-X] [<options>] src dst_archive

ditto -x [-z | -j | -k] [-v] [-V] [<options>] src_archive ...
       dst_directory
Run Code Online (Sandbox Code Playgroud)

在第一种形式中,同上将一个或多个源文件或目录复制到目标目录。如果目标目录不存在,将在复制第一个源之前创建它。如果目标目录已经存在,则源目录将与目标的先前内容合并。

在第二种形式中,ditto将文件复制到提供的dst_file路径名。

接下来的两种形式反映了同上创建和提取档案文件的能力。这些归档文件可以是CPIO格式(对于UNIX内容首选)或PKZip(对于Windows兼容性)。src_archive(和dst_archive)可以是单个字符“-”,导致ditto从stdin(或分别向stdout)读取(写入)归档数据。

同上跟随作为参数提供的符号链接,但在遍历源或目标层次结构时不跟随任何链接。当从源复制现有文件,符号链接和目标中的设备时,ditto会覆盖这些文件,符号链接和设备。生成的文件,链接和设备将具有与复制它们的源项目相同的模式,访问时间,修改时间,所有者和组。名称以.nfs或.afpDeleted开头的管道,套接字和文件将被忽略。同上不修改目标中现有目录的模式,所有者,组,扩展属性或ACL。文件和符号链接不能覆盖目录,反之亦然。

同上可用于在复制过程中“变薄”通用Mach-O二进制文件。同上也可以根据BOM表(“物料清单”)文件的内容选择性地复制文件。同上可保留以超级用户身份运行时源目录中存在的文件硬链接(但不包含目录硬链接),并保留setuid和setgid模式。

同上将在复制时保留资源派生和HFS元数据信息,除非使用--norsrc另行指示。同样,同上将保留扩展属性和访问控制列表(ACL),除非传递了--noextattr或--noacl。可以在环境中将DITTONORSRC设置为命令行上--norsrc --noextattr --noacl的别名。