【问题标题】:Extract the last directory of a pwd output提取 pwd 输出的最后一个目录
【发布时间】:2010-12-17 04:57:22
【问题描述】:

如何提取 pwd 输出的最后一个目录?我不想使用有关目录结构中有多少级别的任何知识。如果我想使用它,我可以这样做:

> pwd
/home/kiki/dev/my_project
> pwd | cut -d'/' -f5
my_project

但是我想使用一个不管我在目录结构中的什么位置都可以工作的命令。我假设有一个简单的命令可以使用 awk 或 sed 执行此操作。

【问题讨论】:

  • 如果你的工作目录是 / 怎么办?

标签: bash unix pwd


【解决方案1】:

您在寻找basename 还是dirname

有点像

basename "`pwd`"

应该是你想知道的。

如果你坚持使用sed,你也可以使用

pwd | sed 's#.*/##'

【讨论】:

  • 或者,更可能是endpath=$(basename $(pwd))
  • “$(pwd)”周围缺少引号。试试这个不带引号: mkdir "ab b"; cd "ab b" endpath=$(basename "$(pwd)")
【解决方案2】:

如果您想完全在 bash 脚本中完成此操作而不运行任何外部二进制文件,${PWD##*/} 应该可以工作。

【讨论】:

  • 在一定程度上...如果您通过具有不同名称的符号链接到达目录,则 $PWD 值将不同于 /bin/pwd 或 /usr/ 生成的值bin/pwd(与内置的 pwd 不同)。
  • @Jonathan Leffler:提问者使用的是pwd内置的,所以我觉得用$PWD比较合适。
  • 你能帮我理解##*/到底在做什么吗?谢谢。
  • 我发现它是命令替换:gnu.org/software/bash/manual/html_node/…
【解决方案3】:

使用 awk:

pwd | awk -F/ '{print $NF}'

【讨论】:

    【解决方案4】:

    应该为您工作: pwd | rev | cut -f1 -d'/' - | rev

    参考: https://stackoverflow.com/a/31728689/663058

    【讨论】:

    • 不知道为什么这被否决了。我非常喜欢这种方法。如果有充分的理由,我想听听。
    • 我也看不出这有什么问题。适用于我的用例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2012-01-03
    • 2023-02-06
    • 2023-02-20
    • 2017-05-07
    相关资源
    最近更新 更多