【问题标题】:Take the last part of the folder path in shell取shell中文件夹路径的最后一部分
【发布时间】:2012-05-18 14:06:03
【问题描述】:

如果你输入 pwd 你会得到类似的东西:

/home/username/Desctop/myfolder/

最后一部分怎么拍? myfolder 路径。

这一定很简单,但我在 shell 中找不到简单的解决方案。我知道如何在 java 中解决这个问题,但在 shell 中不知道。

谢谢

【问题讨论】:

  • 我不认为这是正确的:pwd 的输出包含尾随/

标签: linux bash shell


【解决方案1】:

你是对的——这是一个快速的命令:

basename "$PWD"

【讨论】:

  • 这至少是一个没用的昂贵叉子。用$PWD怎么样?
【解决方案2】:

使用basename $(pwd)两个无用且昂贵的分叉

echo "${PWD##*/}"

应该在没有昂贵的分叉的情况下完全在 shell 中完成这个技巧(障碍:对于根目录,这是空字符串)。

【讨论】:

  • 唯一的问题是最后一个/basename 中被删除(可能不适用于 $PWD 但在其他自定义路径中可能。我仍然会选择这种方法。另一个${VAR%/}(之前)不难。答案+1,还提到了昂贵这个词。
【解决方案3】:

要提取路径的最后一部分,请尝试使用basename...

basename $(pwd);

【讨论】:

  • 迄今为止最好的答案,它适用于我的 mac,但我不确定这个 cmd 可用的 linux 发行版。
【解决方案4】:

你可以使用basename,前提是最后一部分确实是一个目录组件(不是文件):

$ basename /home/username/Desctop/myfolder/
myfolder

【讨论】:

    【解决方案5】:

    在 Linux 中,有一对命令,dirnamebasenamedirname 提取路径的最后部分以外的所有部分,basename 仅提取路径的最后部分。

    在这种情况下,使用basename 会做你想做的事:

    basename $(pwd)

    【讨论】:

      【解决方案6】:
      function basename {
          shopt -s extglob
          __=${1%%+(/)}
          [[ -z $__ ]] && __=/ || __=${__##*/}
      }
      
      basename "$PWD"
      echo "$__"
      

      【讨论】:

        猜你喜欢
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 2019-06-15
        • 2020-06-30
        • 1970-01-01
        • 2014-12-11
        • 2011-09-20
        相关资源
        最近更新 更多