0

これは以前に尋ねられた質問に似ていますが、異なることを約束します。

親サイトから子サイトへの継承を伴うサイトがあります。これの一部はメディアです。メディアの提供を高速化するために、子の親ディレクトリのシンボリック リンク コピーを作成し、子が明確に定義するファイルで上書きします。これにより、Apache は親から html を継承しながらメディア (親から来る可能性があります) から静的にサービスを提供できます。

継承が common->maps->cars であるビルド後の例:

/some/directory/common/
   images/
      cats.png
      muffins.png
   css/
      styles.css

/some/directory/maps/
   images/
      cats.png -> /some/directory/common/images/cats.png
      muffins.png (overridden by child)
   css/
      styles.css -> /some/directory/common/css/styles.css
      mapsStyles.css (child only)

/some/directory/cars/
   images/
      cats.png -> /some/directory/common/images/cats.png
      muffins.png -> /some/directory/maps/images/muffins.png
   css/
      styles.css -> /some/directory/common/css/styles.css
      carsStyles.css (child only)

/images/muffins.pngそのため、現在のサイトに基づいて正しいメディアにシンボリック リンクして受信することができました。サイト固有のメディアは同じディレクトリ構造に保存されますが、そのサイトに固有のメディアのみを含む別の場所に保存されます。

問題は、私がどのようにしようとしても、2 番目の子が作成者ではなく親へのシンボリック リンクになってしまうことです。/some/direcory/cars/images/cats.png上記の例では、共通メディアをプログラム的に指すことができず、マップ メディアのみを指すことができます。

現在、私はコマンドを使用していますcp -sR /some/directory/maps/* /some/directory/cars/

私はこれを PHP で実行していますが、現在、PHP関数でコマンドcpとコマンドを使用してこれらの構造を構築しています。lnexec()

4

2 に答える 2

1

使用すべきtarではないようですcp: 試してみてください (今はテストできません; tar の versino がデフォルトでシンボリックリンクを使って何をするか注意してください. それらをたどるのではなく、シンボリックリンクとして保存する必要があります... しかし ymmv):

#step 1: create an archive of one of the directories_using_common_symlinks:
cd /some/directory/maps/
tar cvf /somewhere/wholeshebang.tar images/ css/
        #ie, tar everything (directories, symlinks, etc).
        #Please add whatever is missing
        #note: it will also contain extra (specific) stuff, which we get rid of below

#step 2: create the real archive of JUST the common stuff
cd /some/temporary_dir/
tar xvf /somewhere/wholeshebang.tar  #regurgitate all the content.
rm      /somewhere/wholeshebang.tar  #we won't need that one anymore, it contains too much
rm images/muffins.png  css/mapStyles.css #delete all extra stuff
tar cvf /somewhere/just_commons.tar  #recreate tar, this time with only common stuff.

#step 3: use the new archive to "kickstart" the other directories
cd /the/destination
tar xvf /somewhere/just_commons.tar  #regurgitte the common stuff (dirs, symlinks)
#then add whatever is specific to /the/destination
于 2013-05-14T17:08:52.743 に答える
0

問題がリンクだけの場合.....「cp -l」を試すことができます....(詳細についてはman cpを確認してください)

マニュアルページ:

-l, --link
     hard link files instead of copying

したがって、これで解決するはずです!

于 2013-05-14T16:44:04.107 に答える