
シンボリックリンクを含むフォルダーをコピーし、宛先フォルダーにシンボリックリンクを保持するにはどうすればよいですか? 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 プログラムでの使用に関する正当な懸念を脇に置いておきます。
cp
Linux や BSD に共通する、これを行うための標準化されたオプションはないかもしれませんが、pax
あります。
( cd ソース && pax -pp -r -w * 保存先/ )