恢复转换为文本文件的符号链接的最简单方法是什么?

恢复转换为文本文件的符号链接的最简单方法是什么?

我有一些包含许多符号链接的文件夹。不幸的是,在将它们复制到不同的文件系统后,它们变成了纯文本文件,内容是链接目标。即:

$ 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但与“”不同,它可以嵌套。

相关内容