2017-05-19 134 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