トピックで説明されていますが、基本的に、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