シンボリックリンクを含むフォルダをコピーする

シンボリックリンクを含むフォルダをコピーする

シンボリックリンクを含むフォルダーをコピーし、宛先フォルダーにシンボリックリンクを保持するにはどうすればよいですか? PHP/Bash で次のような操作を行っています:

system("cp -r production-clone-target production-sites/{$instanceName}");

ただし、シンボリックリンクは宛先フォルダーに表示されません。

答え1

--preserve=linksコマンドにスイッチを追加してみてくださいcp

からman cp

    --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps), 
if possible additional attributes: context, links,xattr, all

編集: OS X の場合は、 を使用しますcp -a

答え2

rsync も使用できます:

-l, --links                 copy symlinks as symlinks

-aサブディレクトリなどもコピーするには、これも含まれる が便利です。

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

したがって、コード例では次のように実行できます。

system("rsync -a production-clone-target production-sites/{$instanceName}");

答え3

system()PHP プログラムでの使用に関する正当な懸念を脇に置いておきます。

cpLinux や BSD に共通する、これを行うための標準化されたオプションはないかもしれませんが、paxあります。

( cd ソース && pax -pp -r -w * 保存先/ )

関連情報