2017-05-19 141 views
0

我試圖運行從一個目錄遞歸符號鏈接到另一個:遞歸符號鏈接的目錄樹

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

多了一條:我需要從前綴剝離data/

在OS X服務器(10.8,Mountain Lion)上運行 - 不支持所有標準GNU命令,如cp -rs

我的意思遞歸:

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 - 已經很明顯,不要遞歸。你可以簡單地'查找數據-maxdepth 1 -type d -exec ln -s ../ {} current \;' – alvits

+0

@duskwuff:'data/foo/bar' =>'current/foo/bar','data/foo/bartwo/play' =>'current/foo/bartwo/play' – guice

回答

2

你不需要做任何遞歸。一旦鏈接到目錄,它下面的所有文件和目錄都可以通過鏈接訪問。

你需要的是在頂層目錄的唯一鏈接...

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

,或者根據您的要求,使得current鏈接到data甚至可能就足夠了。

+0

錯誤。你會以'current'結尾,指向無處的鏈接。試試'cd current; ln -s ../data/*/ .'。 – alvits

+0

@alvits謝謝,修正。 (或者只是使用'current'的絕對路徑。) – duskwuff

+0

絕對路徑一定會起作用。乾杯:) – alvits