Mac では「cp --parents」と同等

Mac では「cp --parents」と同等

トピックで説明されていますが、基本的に、Linux システムと Cygwin を搭載した Windows システムで使用される bash スクリプトがあり、次のコマンドは完全に機能します。

cp --parents

ただし、Mac のターミナルで同じコマンドを実行すると、次のエラーが発生します。

cp: illegal option -- -
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

このコンテキストでは、選択したファイルのリストを出力ディレクトリにコピーし、ディレクトリ構造を保持するコマンドを使用しています。

cp --parents foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

この動作を実現するにはどうすればいいでしょうかcp --parents?

答え1

--parentsこれはおそらく GNU に特有の非 POSIX 動作ですcpが、OS X の BSD 派生版cpにはそれがありません。

おそらく、Mac にGNU をインストールして使用することで、必要な機能を実現できるでしょうcp。これはおそらく と呼ばれる GNU パッケージの一部でありfileutils、Homebrew、MacPorts、または Fink を使用してインストールできるでしょう。

答え2

私は、コピーしていたファイルの相対ディレクトリ構造をコピーするために、Rsync パラメータ -R を使用して、このコマンドを MAC 上で合成することができました。

構文:

rsync -R <list of files to copy> <target dir>

使用法:

rsync -R foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

CPではなくRSYNCを使用すると多少のオーバーヘッドが追加される可能性はありますが、同じ結果が得られます。

答え3

ありますかbasename?ある場合:

$ for i in `ls foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file`; do cp $i ~/my-output/`basename $i`; done

関連情報