在 Mac 上相当于“cp --parents”

在 Mac 上相当于“cp --parents”

主题对此进行了解释——基本上我有一个在 Linux 系统和带有 Cygwin 的 Windows 系统上使用的 bash 脚本,其中以下命令可以完美运行:

cp --parents

但是,在 Mac 的终端上运行相同的命令会出现以下错误:

cp: illegal option -- -
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

我在此上下文中使用命令将选择的文件列表复制到输出目录中并保留其目录结构:

cp --parents foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

我该怎么做才能获得这种cp --parents行为?

答案1

--parents可能是特定于 GNU 的非 POSIX 行为cp,而 OS X 中的 BSD 派生cp却没有它。

cp通过在 Mac 上安装并使用它,您可能可以获得所需的功能。它可能是名为 的 GNU 软件包的一部分fileutils,您可能可以使用 Homebrew、MacPorts 或 Fink 安装它。

答案2

我设法在 MAC 上通过使用 Rsync 参数 -R 来合成此命令,以复制我正在复制的文件的相对目录结构。

句法:

rsync -R <list of files to copy> <target dir>

用法:

rsync -R foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

虽然我确信使用 RSYNC 而不是 CP 可能会增加一些开销,但结果是一样的

答案3

你有吗basename?如果有:

$ for i in `ls foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file`; do cp $i ~/my-output/`basename $i`; done

相关内容