在 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,创建任何丢失的中间目录。
这也让我很困扰。 解决此问题的方法可能是使用 rsync。
rsync -R test/withintest/go.rb test2
与
cp --parents
效果相同,OS X标配rsync。
您可以使用
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"
自制方式:
安装
coreutils
brew install coreutils
使用
GNU
g- 前缀命令
gcp --parents test/withintest/go.rb test2
我使用了 rsync,我所做的是:
rsync -R dir/**/file.json destination
尝试
mkdir -p `dirname "$file_path"` && cp "$old_dir/$file_path" "$file_path"
这首先会在相对文件路径中创建包含所有迭代的目录。然后它将文件复制到新创建的目录中。
我不会用 GNU cp 替换 mac cp。我也不会使用同上,因为它不是跨平台的。而是使用跨平台工具,例如 rsync:
rsync <srcDir/srcFile> <dst>
结果:dst/srcDir/srcFile
我必须向 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