从文件内容创建符号链接
Create symlink from the contents of a file
由于工作流程效率低下,我不得不在 Linux 机器和 windows 机器之间复制目录。目录包含 symlinks,其中(在复制 Linux>Windows>Linux 后)包含明文形式的 link(例如 foobar.C
包含文字 ../../../Foo/Bar/foobar.C
)
是否有有效的方法从文件内容递归地重新创建 symlinks 以获得完整目录?
我试过:
find . | xargs ln -s ??A?? ??B?? && mv ??B?? ??A??
我真的不知道如何填充变量,但是 ??A??
应该是文件中 symlink 的目的地,??B??
应该是文件的名称附加后缀 _temp
的文件。
如果您确定所有文件都包含符号链接,那不是很难。
find . -print0 | xargs -r 0 sh -c '
for f; do ln -s "$(cat "$f")" "${f}_temp" && mv "${f}_temp" "$f"; done' _
_
伪参数是必需的,因为 sh -c
的第二个参数用于填充子 shell 中的 [=13=]
。 shell 本身是必需的,因为您不能直接将多个命令传递给 xargs
.
-print0
和相应的 xargs -0
是一个 GNU 扩展,可以正确处理棘手的文件名。有关详细信息,请参阅 find
手册。
我可能会在继续符号链接之前添加一个简单的验证检查;例如,如果 grep -cm2 .
文件 returns 2,则跳过该文件(它包含多于一行的文本)。如果您可以更具体(例如,所有符号链接都以 ../
开头),一定要更具体。
由于工作流程效率低下,我不得不在 Linux 机器和 windows 机器之间复制目录。目录包含 symlinks,其中(在复制 Linux>Windows>Linux 后)包含明文形式的 link(例如 foobar.C
包含文字 ../../../Foo/Bar/foobar.C
)
是否有有效的方法从文件内容递归地重新创建 symlinks 以获得完整目录?
我试过:
find . | xargs ln -s ??A?? ??B?? && mv ??B?? ??A??
我真的不知道如何填充变量,但是 ??A??
应该是文件中 symlink 的目的地,??B??
应该是文件的名称附加后缀 _temp
的文件。
如果您确定所有文件都包含符号链接,那不是很难。
find . -print0 | xargs -r 0 sh -c '
for f; do ln -s "$(cat "$f")" "${f}_temp" && mv "${f}_temp" "$f"; done' _
_
伪参数是必需的,因为 sh -c
的第二个参数用于填充子 shell 中的 [=13=]
。 shell 本身是必需的,因为您不能直接将多个命令传递给 xargs
.
-print0
和相应的 xargs -0
是一个 GNU 扩展,可以正确处理棘手的文件名。有关详细信息,请参阅 find
手册。
我可能会在继续符号链接之前添加一个简单的验证检查;例如,如果 grep -cm2 .
文件 returns 2,则跳过该文件(它包含多于一行的文本)。如果您可以更具体(例如,所有符号链接都以 ../
开头),一定要更具体。