cp --mac 上的父母选项

问题描述 投票:0回答:8

在 Linux 上,我有一个可用于 cp 命令的 --parents 选项,因此我可以执行以下操作

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

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

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

PS。 --parents 的目的如下:

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

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

例如命令:

      cp --parents a/b/c existing_dir 

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

macos command-line command-line-arguments
8个回答
99
投票

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

rsync -R test/withintest/go.rb test2

cp --parents
效果相同,OS X标配rsync。


19
投票

您可以在 Mac OS X 上使用

ditto
命令:

基本形式

ditto <src-path> <dst-path>

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


6
投票

您可以使用

MacPorts
安装 GNU 版本的 cp

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

sudo port install coreutils

然后您将能够通过在命令前添加

cp
前缀来使用 GNU 版本
ls
和其他核心实用程序(
date
cat
g
等):

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

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

~/.bash_profile

export PATH="/opt/local/libexec/gnubin:$PATH"

4
投票

自制方式:

安装

coreutils

brew install coreutils

使用

GNU
g- 前缀命令

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

4
投票

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

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


3
投票

尝试

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

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


0
投票

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

rsync <srcDir/srcFile> <dst>

结果:dst/srcDir/srcFile


0
投票

我必须向 rsync 添加 -dir 选项才能让它为我工作:

rsync -R -dir a/b tmp

结果:

$ find a
a
a/b
a/b/f1.txt
a/c
a/c/f2.txt
a/d
a/d/f3.txt

$ find tmp
tmp
tmp/a
tmp/a/b
tmp/a/b/f1.txt
© www.soinside.com 2019 - 2024. All rights reserved.