获取包含文件夹的名称

时间:2014-04-04 07:02:49

标签: linux shell

我有一个我想在许多目录中复制的shell脚本

在此脚本中,如何初始化变量

PARENT_FOLDER

以某种方式在其中存储包含此脚本的文件夹的名称(而不是绝对路径)?

请注意,此脚本可以从任何文件夹运行。

提前致谢。

4 个答案:

答案 0 :(得分:2)

在大多数情况下,以下内容获取脚本所在目录的绝对路径:

PARENT_FOLDER=$(dirname "$(readlink -f "$0")")

(OSX和BSD可能缺少-f选项,否则路径可能仍包含符号链接。)

如果您只想要路径中最终目录的名称,只需添加一步:

PARENT_FOLDER=$(dirname "$(readlink -f "$0")")
PARENT_FOLDER=${PARENT_FOLDER##*/}

在缺少readlink -f但可用bash的系统上:

PARENT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PARENT_FOLDER=${PARENT_FOLDER##*/}

如果缺少readlink -f和bash:

PARENT_FOLDER="$( cd "$( dirname "$0" )" && pwd )"
PARENT_FOLDER=${PARENT_FOLDER##*/}

答案 1 :(得分:2)

要获取Current Directory的父文件夹,您可以使用以下命令

PARENT_FOLDER=$(pwd | awk -F"/" 'OFS="/"{$NF=""}1')

更新

  

也可以在命令下面工作

     

来自命令dirname的手册页    打印NAME并删除其尾随/组件;如果NAME不包含/,则输出'。'(表示当前目录)。

PARENT_FOLDER = $(dirname“$ PWD”) 或

PARENT_FOLDER=$(dirname "$0")

答案 2 :(得分:1)

PARENT_FOLDER=$(pwd | awk -F / '{if ($NF!="") print $NF; else print "/"}')

答案 3 :(得分:0)

在mac和linux上为我工作的最佳解决方案是

PARENT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PARENT_FOLDER=${PARENT_FOLDER##*/}

这是此链接中给出的答案的组合:

Getting the source directory of a Bash script from within

@ John1024给出的答案