• ベストアンサー

OSによるcpコマンドの動作違いに関して(特にリンクファイルのコピー)

cpコマンドでシンボリックリンクファイルをコピーする際にlinux版のcpではリンクのままコピーされますが、solaris版ではハードコピーされてしまいます。 リンクをリンクのままとしてコピーするにはtarを使うなど他の方法も考えられますが、出来ればコピーコマンドのオプションによって簡単に出来たら楽と思っています。 どのようにしたらよいのでしょうか? <cpのバージョンを使い分ける、オプションを与える等々> また、linux版でも「あるファイルのリンクのリンク」をコピーすると元ファイルまで辿って新しいリンクファイルが作成される様です。これを直接コマンドラインで指定したファイルのリンクとしたい場合どのようなオプションを与えるのが良いのでしょうか? 細かな内容で申し訳在りませんが、宜しくお願いいたします。 ------ [linux(Redhat8)版cp]  touch file; ln -s file linked_file cp -R linked_file aaa ※ aaa はfileのシンボリックリンクになる /bin/cp --version cp (fileutils) 4.1.9 著者 Torbjorn Granlund, David MacKenzie, and Jim Meyering. Copyright (C) 2002 Free Software Foundation, Inc. [solaris(sunos5.8)版cp] ※ 上と同じコマンド実行でcpは実ファイルになる /mp/suel/tool/bin/cp --version cp (GNU fileutils) 4.0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Solarisの配布物のコマンドでできるかどうかは分かりません。 (私ならtarを使いますね、、、。) ご質問のlinux版のcpは、GNUのcoreutils(またはfileutils)の中に 入っているので、それをコンパイル&インストールすれば linuxとほぼ同じ感じで使えると思います。 (Solarisでコンパイル可能かどうかは確認していませんが、 手元のFreeBSDでは普通に./configure→makeでビルドできました。) ちなみに、coreutilに収録されているものの方がバージョンが新しいです。 (この辺の事情は良く分かっていません。) http://ftp.gnu.org/gnu/coreutils/ http://ftp.gnu.org/gnu/fileutils/

参考URL:
http://ftp.gnu.org/gnu/coreutils/
tk_1980024
質問者

補足

どうも有難うございます。 上記環境では、SolarisもLinuxもそれぞれOS標準を用いているわけではなく、gnuのfileutilのcpを使用しているにも係わらず動作に違いが出ております。 以上質問が言葉足らずで失礼致しました。

その他の回答 (2)

回答No.3

fileutils-4.1のcpのヘルプ「cp --help」で出るオプション一覧では 「-R」以外では、「-d」,「--no-dereference」オプションあたりが 該当しそうなので、それを4.0で試してみてはいかがでしょうか? (4.0のcpで「cp --help」してみるのが良いかもしれません。)

回答No.2

/mp/suel/tool/bin/cp --version これではSolarisオリジナルのcpではありませんね。Solarisオリジナルのcpは/usr/bin/cpにあります。こちらでやっても実ファイルになることには変わりありませんけれど。 やっぱりこう言うときの基本形は tar cf - /source/directory | (cd /dest/directory && tar xf -) でしょう。パスは相対でももちろん構いません。一々タイプするのが面倒ならシェルスクリプトの実行ファイルを作ってもいいですしね。

tk_1980024
質問者

お礼

どうも有難うございます。 確かにドットファイルを含むようなディレクトリのコピーを行ったりする際は僕もninja_ex250さんの書かれたtarコマンドを使用してはいるのですが、ファイル2-3個のコピーにtarの長いコマンドを打つのはどうもと思っていたところでした。

関連するQ&A