我有一些包含许多符号链接的文件夹。不幸的是,在将它们复制到不同的文件系统后,它们变成了纯文本文件,内容是链接目标。即:
前
$ ll link
... link -> /path/to/target
后
$ cat link
/path/to/target
恢复此链接的最简单方法是什么?也许是一行代码或一个 shell 脚本。
假设我有数百个这样的链接,有没有办法恢复它们所有,而不必手动对每个链接运行修复?
答案1
使用此命令:
ls *txt | xargs -I R1 sh -c "cat R1 | xargs -I R2 ln -sf R2 R1"
替换ls *txt
为输出应为符号链接的文本文件列表的内容。例如,find . -name "*txt"
列出当前目录中或目录下的所有 *txt 文件。
答案2
尝试这个:
ls * | while read f; do
ln -sf "$(cat $f)" "$f"
done
就像 wingedsubmariner 的回答一样,ls *
应该替换为能够准确列出您想要的文件的内容。
我发现
ls * | while read f; do
# command executed for each file
done
构造非常有用。据我所知,这是处理所有文件名的正确方法,例如,如果文件名中有空格,则“$f”仍将有效(与 不同for f in $(ls *); do...done
)。
仅供参考:$(cmd) 与 相同,cmd
但与“”不同,它可以嵌套。