【问题标题】:Unix get final directory name in a symlinkUnix在符号链接中获取最终目录名称
【发布时间】:2022-01-10 17:01:18
【问题描述】:

我在一个充满版本的目录中有符号链接,每个版本都指向一个特定的版本。 文件结构如下所示:

  • /path/to/stuff/v1
  • /path/to/stuff/v1.1
  • /path/to/stuff/v2
  • /path/to/stuff/v3
  • /path/to/stuff/A -> /path/to/stuff/v1.1
  • /path/to/stuff/B -> /path/to/stuff/v3

我需要一种仅从特定符号链接获取版本号的方法(即对于 /path/to/stuff/A,我只想要“v1.1”)。

readlink 获取整个路径:readlink /path/to/stuff/A = /path/to/stuff/v1.1

我已经搜索了其他问题,但我发现没有一个符合这些确切要求

【问题讨论】:

    标签: shell unix directory symlink


    【解决方案1】:

    您可以使用basenamecommand substitution(在所有 POSIX shell 中都可用,不仅在 Bash 中):

    $ basename "$(readlink /path/to/stuff/A)"
    v1.1
    

    或者rev + cut:

    $ readlink  /path/to/stuff/A | rev | cut -d/ -f1 | rev
    v1.1
    

    【讨论】:

    • 顶级示例完美运行!不过似乎不需要引号
    • 需要引用来防止word splitting,除非您知道自己在做什么,否则始终使用它们是一个好习惯。尝试使用包含空格的路径,例如
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多