58

在 Linux 上,我有一个可用于 cp 命令的 --parents 选项,所以我可以这样做

cp --parents test/withintest/go.rb test2

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html

在 Mac 上,我没有此选项可用。有没有办法在 Mac 上做到这一点?为什么这个选项不可用?

PS。--parents 的目的如下:

'--parents' 通过将斜杠和源文件的指定名称附加到目标目录来形成每个目标文件的名称。

给 cp 的最后一个参数必须是现有目录的名称。

例如,命令:

      cp --parents a/b/c existing_dir 

将文件 a/b/c 复制到 existing_dir/a/b/c,创建任何缺少的中间目录。

4

7 回答 7

87

这也让我很困扰。解决方法可能是使用 rsync。

rsync -R test/withintest/go.rb test2

cp --parents与 OS X 标准的 rsync具有相同的效果。

于 2012-12-13T07:49:48.437 回答
17

您可以ditto在 Mac OS X 上使用以下命令:

基本形式

ditto <src-path> <dst-path>

做你想做的事。还有更多选择 - 查看手册页

于 2013-05-21T13:54:15.187 回答
6

cp您可以使用MacPorts安装 GNU 版本。

安装 MacPorts 后,您可以安装 coreutils 软件包:

sudo port install coreutils

然后,您将能够使用 GNU 版本cp和其他核心实用程序(lsdatecat等),方法是在命令前加上g

gcp --parents test/withintest/go.rb test2

如果您希望默认使用这些 GNU 版本,您可以添加 GNU bin 更新您的路径。将以下内容添加到您的~/.bash_profile:

export PATH="/opt/local/libexec/gnubin:$PATH"
于 2016-11-04T20:26:36.210 回答
3

我使用了 rsync,我所做的是:

rsync -R dir/**/file.json destination

于 2020-11-09T10:22:52.780 回答
2

自制方式:

安装coreutils

brew install coreutils

使用GNUg 前缀命令

gcp --parents test/withintest/go.rb test2
于 2020-02-20T13:28:15.383 回答
2

尝试

mkdir -p `dirname "$file_path"` && cp "$old_dir/$file_path" "$file_path"

这首先会在相对文件路径中创建包含所有迭代的目录。然后它将文件复制到新创建的目录中。

于 2021-09-02T05:39:08.117 回答
1

我不会用 GNU cp 替换 mac cp。我也不会使用同上,因为它不是跨平台的。而是使用跨平台工具,例如 rsync:

rsync <srcDir/srcFile> <dst>

结果:dst/srcDir/srcFile

于 2017-05-20T19:53:03.390 回答