gpt4 book ai didi

linux - 从文件内容创建符号链接(symbolic link)

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:45 25 4
gpt4 key购买 nike

由于工作流程效率低下,我不得不在 Linux 机器和 Windows 机器之间复制目录。目录包含符号链接(symbolic link)(复制 Linux>Windows>Linux 后)包含明文链接(例如 foobar.C 包含文本 ../../../Foo/Bar/foob​​ar.C)

是否有一种有效的方法可以从文件内容递归地为完整目录重新创建符号链接(symbolic link)?

我试过:

find . | xargs ln -s ??A?? ??B?? && mv ??B?? ??A??

我真的不知道如何填充变量,但是 ??A?? 应该是文件中符号链接(symbolic link)的目标,而 ??B?? 应该是附加后缀 _temp 的文件名。

最佳答案

如果您确定所有文件都包含一个符号链接(symbolic link),那不是很难。

find . -print0 | xargs -r 0 sh -c '
for f; do ln -s "$(cat "$f")" "${f}_temp" && mv "${f}_temp" "$f"; done' _

_ 虚拟参数是必需的,因为 sh -c 的第二个参数用于在子 shell 中填充 $0。 shell 本身是必需的,因为您不能直接将多个命令传递给 xargs

-print0 和相应的 xargs -0 是一个 GNU 扩展,可以正确处理棘手的文件名。有关详细信息,请参阅查找手册。

在继续符号链接(symbolic link)之前,我可能会添加一个简单的验证检查;例如,如果文件上的 grep -cm2 . 返回 2,则跳过该文件(它包含多于一行的文本)。如果您可以更具体(例如,所有符号链接(symbolic link)都以 ../ 开头),一定要更具体。

关于linux - 从文件内容创建符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28876168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com