2012-06-28 126 views
19

选项在Linux上,我有可用于CP命令--parents选项,所以我可以做CP --parents在Mac

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,在创建任何缺少中间目录。

回答

17

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

基本形式

ditto <src-path> <dst-path> 

你想要做什么。还有很多更多的选择太 - 检查出man page

+0

完美。根据需要,'ditto some/dir/structure/file/tmp/some/dir/structure/file'创建/ tmp目录下的some/dir/structure目录。 – ca2longoria

+5

我不明白这是如何回答原来的问题。 'cp --parents a/b/c existing_dir'和'ditto a/b/c existing_dir'似乎做了不同的事情。 – Alec

+1

@alecb我认为答案是解决OP实际想要达到的目标,而不是确切的方法。当我发现'ditto'命令时,我正在经历同样的思考过程。 – Echelon

32

这困扰了我相当多的为好。 用于此解决办法可能是使用rsync。

rsync -R test/withintest/go.rb test2 

具有如cp --parents相同的效果和OS X自带rsync的标准。

2

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

安装使用MacPorts后,您可以安装的coreutils包:

sudo port install coreutils 

然后,你就可以通过添加前缀使用GNU版本cp等核心utilitites(lsdatecat等)用g命令:

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

如果你想在默认情况下可以使用这些GNU版本,你可以添加GNU斌更新您的路径。以下内容添加到您的~/.bash_profile

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

我不会取代GNU CP MAC CP。我也不会使用同上,因为它不是跨平台的。而是使用跨平台工具,如rsync的:

rsync <srcDir/srcFile> <dst> 

结果:DST/SRCDIR/SRCFILE