web-dev-qa-db-ja.com

Macのcp --parentsオプション

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にコピーし、不足している中間ディレクトリを作成します。

41
dmonopoly

Mac OS Xではdittoコマンドを使用できます。

基本形

ditto <src-path> <dst-path>

あなたがしたいことをします。さらに多くのオプションがあります- man page をチェックしてください。

18
Echelon

これも私をかなり悩ませました。これの回避策は、rsyncを使用することです。

rsync -R test/withintest/go.rb test2

cp --parentsと同じ効果があり、OS Xにはrsyncが標準で付属しています。

62
Stephan

MacPorts を使用して、GNU cpのバージョンをインストールできます。

MacPortsをインストールしたら、coreutilsパッケージをインストールできます。

Sudo port install coreutils

その後、GNU version cpおよびその他のコアユーティリティ(lsdatecatなど)、コマンドの前にgを付けます。

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

これらのGNUバージョンをデフォルトで使用したい場合は、GNU bin update pathを追加できます。以下を~/.bash_profileに追加してください。

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

MacのcpをGNU cpで置き換えません。クロスプラットフォームではないため、dittoも使用しません。代わりに、rsyncなどのクロスプラットフォームツールを使用します。

rsync <srcDir/srcFile> <dst>

結果:dst/srcDir/srcFile

2
vikrantt

自作の方法:

インストールcoreutils

brew install coreutils

GNU g-接頭辞付きコマンドを使用する

gcp --parents test/withintest/go.rb test2
0
Martin Peter