2017-05-19 14 views
0

私は別のものに1つのディレクトリから再帰的シンボリックリンクを実行しようとしている:再帰的にシンボリックリンクディレクトリツリー

find data/* -type d -exec ln -s {} current/{} \; 

1加えると:私は接頭辞からdata/を取り除く必要があります。

OS Xサーバ(10.8、Mountain Lion)で動作しています - cp -rsのようなすべての標準GNUコマンドがサポートされているわけではありません。

私は再帰的で意味:

dataはLaravelの間で永続的なディレクトリのリストですリリース:

data/ 
    \ storage/ 
     - framework/ 
      - session/ 
     - app/ 
     \ logs/ 

彼らはにマッピングする必要があります:

current/ 
    \ storage/ 
     - framework 
      - session/ 
     - app/ 
     - logs/ 
     # Also in storage, but we do NOT want to persist 
     - debugbar/ 
     - framework/ 
      - cache/ 
      - views/ 

当社dataディレクトリは意志であります私たちのサイトを更新しながら、アプリケーションの起動の間に永続的な記憶域になり、evのサイトの以前のバージョンは保持されますロールバック(currentは最近のリリースへのソフトリンクになります)。

注:Laravel以外のサイトもあります。 dataが標準となる予定で、サイトで永続性が必要なものに応じて、ディレクトリの再構成が行われます。常にdata/storageになるとは限りません。

+0

「再帰的」とは何を意味するのでしょうか? 'current/foo'から' data/foo'(例えば)へのリンクを作成すると、そのリンクを介してそのサブディレクトリはすべて既にアクセス可能になっています。追加の作業は必要ありません。 – duskwuff

+0

@duskwuff - すでに明らかにした、再発しないでください。あなたは '' data -maxdepth 1 -type d -exec ln -s ../ {}現在の\; '' – alvits

+0

@duskwuff: 'data/foo/bar' =>' current/foo/bar'、 'data/foo/bartwo/play' => '現在/ foo/bartwo/play' – guice

答えて

2

再帰を行う必要はありません。ディレクトリにリンクすると、リンクを介してその下のすべてのファイルとディレクトリにアクセスできます。

必要なだけのリンクはトップレベルでのディレクトリにある...

cd current 
ln -s ../data/*/ . 

それとも、あなたの要件に応じて、datacurrentのリンクを作ることでも十分かもしれません。

+0

間違っています。あなたはどこにもリンクしていないリンクを持つ 'current'で終わるでしょう。 'cd currentを試してください。 ln -s ../data/*/ .'です。 – alvits

+0

@alvitsありがとう、固定。 (または、単に 'current'への絶対パスを使用してください。) – duskwuff

+0

絶対パスは間違いなく動作します。乾杯:) – alvits