2012-12-06 29 views
0

我试图让libetpan在iOS上运行,但是它们的安装程序脚本似乎有问题(这里更多的detail解释了这个问题)..但基本上我得到了带有指向无处即Shellscript在所有文件中循环并调整符号链接

mhdriver_types.h -> ../../src/driver/implementation/mh/mhdriver_types.h 

时,实际上它应该是

mhdriver_types.h -> ../../../src/driver/implementation/mh/mhdriver_types.h 

我想写的是通过所有的符号链接循环,删除每一个,然后重新创建一个shell脚本的符号链接的长列表文件夹一个符号链接因为它到相同的前一个目的地只有一个子目录更深。基本上做我在这个例子中做的所有文件..

任何想法?

回答

3

通过anishsane的answer启发我得到这个代码的工作原理:

for name in $(find . -type l); do 
    tgt=`readlink "$name"` 
    ln -sf ../$tgt 
done 
+1

我通常避免在$(command)中使用'for filename'。因为在最坏的情况下,当文件名包含空格时,它会失败。 'while read'是更稳定的解决方案。 (就我个人而言,我之前也使用过'var in'语法,但现在转移到'while read'语法:D) – anishsane

+0

有趣的..那么在这个讨论中唯一的失败就是:为什么你的代码不工作我?唯一的区别是while循环vs for循环.. lemme做一些更多的挖掘,看看会发生什么:) – abbood

1

尝试:

find $DIR_PATH -type l | while read x; do tgt=`readlink "$x"`; ln -sf ../$tgt $x; done 
+0

我得到 发现:非法选项 - T的 发现:非法选项 - ÿ 发现:非法选项 - p 找到:非法选项 - e 找到:l:没有这样的文件或目录 – abbood

+0

哦,我在描述中没有看到iOS ... find命令可能有不同iOS上的选项。 – anishsane

+0

我正在执行这个在mac osx外壳..不是在iOS ..但反正lemme尝试不同的命令变化 – abbood

相关问题