繁体   English   中英

从文件内容创建符号链接

[英]Create symlink from the contents of a file

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

有没有一种有效的方法可以从文件的内容中递归地重新创建符号链接,以获得完整的目录?

我努力了:

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

我真的不知道如何填充变量,但是??A?? 应该是文件和符号“ ??B?? ”中符号链接的目标。 应该是后缀_temp的文件名。

如果您确定所有文件都包含符号链接,那不是很难。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM