繁体   English   中英

获取包含文件夹的名称

[英]Getting name of containing Folder

我有一个要在许多目录中复制的Shell脚本

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

PARENT_FOLDER

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

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

提前致谢。

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

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##*/}

要获取当前目录的父文件夹,可以使用以下命令

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

更新

也下面的命令可以工作

从命令dirname Print NAME的手册页中删除其尾部/ component; 如果NAME不包含/,则输出'。 (表示当前目录)。

PARENT_FOLDER = $(目录名“ $ PWD”)或

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

在Mac和Linux上都对我有用的最佳解决方案是

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

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

从内部获取Bash脚本的源目录

而@ John1024给出的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM