修复版本更改后的符号链接

修复版本更改后的符号链接

假设我有一个指向文件的符号链接,该文件的名称中包含其版本。 (该文件实际上是一个 jar 文件)现在说版本发生了变化,即我链接到的旧文件被删除,并生成了一个名称中具有不同版本的新文件。如何生成一个新链接,其新名称指向新生成的 jar 文件,并在 bash 脚本中删除旧链接。

到目前为止我所做的工作是这样的:

cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i readlink "{}" | sed -r "s#(.*/).*\.jar#\1#g"

对于每个损坏的链接,这为我提供了新 jar 文件所在的文件夹。接下来我尝试做的是找到新的 jar 文件,如下所示:

cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i find `readlink "{}" | sed -r "s#(.*/).*\.jar#\1#g"` -name "prefix*.jar"

这应该给我带来新的罐子,确实如此,但它是递归工作的,所以我不能使用它。我不知道递归文件夹中是否还有其他与此模式匹配的内容,我只知道,在当前文件夹中只有一个与 regex 匹配的 jar prefix*.jar,这就是我需要链接的内容。

之后,我需要实际创建链接,我认为这并不难,具体取决于如何找到我正在寻找的这个文件,因为文件名可以保持不变(即不需要第二个参数ln)。但我不知道如何删除损坏的链接而不再次调用初始查找命令。

这个问题已经有一段时间了,因为我对 Linux 比较陌生,但最终还是求助于帮助,因为我真的不应该在这样一个微不足道的问题上花那么多时间。

答案1

我通过使用 awk 中的 gsub 从文件名中清除它来创建一个没有版本号的链接,并将链接替换为升级的 jar 文件,从而解决了同样的问题。

由于我们使用特定的版本号方案,因此将其发布在这里没有任何帮助,但如果您确实需要它,请询问,我会添加它。

一个非常基本的例子:

find ./ -name \*[0-9]\*.jar | awk '{dest=$0;gsub(/[0-9]*/,"");\
    print "ln -sf "dest" "$0}'

相关内容