如何在bash中获取给定路径的根目录?
我的剧本:如何在bash中获取给定路径的根目录?,bash,path,directory,dirname,Bash,Path,Directory,Dirname,我的剧本: #!/usr/bin/env bash PATH=/home/user/example/foo/bar mkdir -p /tmp/backup$PATH 现在我想得到“$PATH”:/home的第一个文件夹/ 如何始终像上面的示例一样检测第一个文件夹?“dirname$PATH”只返回“/home/user/example/foo/” 提前感谢!:) 如果路径总是有一个绝对的形式,你可以做一些像 ROOT=${PATH#/} ROOT=/${ROOT%%/
#!/usr/bin/env bash
PATH=/home/user/example/foo/bar
mkdir -p /tmp/backup$PATH
现在我想得到“$PATH”:/home的第一个文件夹/
如何始终像上面的示例一样检测第一个文件夹?“dirname$PATH”只返回“/home/user/example/foo/”
提前感谢!:) 如果路径总是有一个绝对的形式,你可以做一些像
ROOT=${PATH#/} ROOT=/${ROOT%%/*}
或
您也可以参考我的函数。获取第一个FireFactory:
path=/home/user/example/foo/bar
mkdir -p "/tmp/backup$path"
cd /tmp/backup
arr=( */ )
echo "${arr[0]}"
PS:切勿在脚本中使用PATH变量,因为它将覆盖默认路径,并且脚本将无法执行许多系统实用程序
编辑:这可能适合您:
IFS=/ && set -- $path; echo "$2"
home
您可以尝试此awk命令:
basedirectory=$(echo "$PATH" | awk -F "/" '{print $2}')
此时,basedirectory
将是字符串home
然后你写:
rm -rf ./"$basedirectory"/
我找到了一个解决方案:
#/usr/bin/env bash
DIRECTORY="/home/user/example/foo/bar"
BASE_DIRECTORY=$(echo "$DIRECTORY" | cut -d "/" -f2)
echo "#$BASE_DIRECTORY#";
这将始终返回第一个目录。在本例中,它将返回以下结果:
#home#
感谢@condorwasabi对awk的创意!:) 纯bash:
DIR="/home/user/example/foo/bar"
[[ "$DIR" =~ ^[/][^/]+ ]] && printf "$BASH_REMATCH"
易于调整正则表达式。您可以使用
#/usr/bin/env bash
DIRECTORY=“/home/user/example/foo/bar”
基本目录=$(目录名“${DIRECTORY}”)
echo“#$BASE#u目录”;
输出以下内容
/home/user/example/foo
我想,用户想从中提取
主页
。嗯我怎么能像上面的例子一样总是检测到第一个文件夹
不是很清楚。我将其解释为OP试图从/tmp/backup
路径获取第一个目录。我开始评论的目的是感谢您&+1对路径
变量的警告:然后意识到答案可能不满足OP的要求。嗯,在这种情况下,konsolebox可能会从以下问题中正确解释:现在我想得到“$PATH”的第一个文件夹:/home/
这看起来不错,但不起作用$basedirectory始终为空。但是谢谢!:)很高兴你找到了解决办法。不管怎样,你是对的,我只是编辑了剧本。我不知道为什么我写了{print$1}
,我在发布之前也测试了它。现在应该可以了。对不起,我不明白。o、 哦,但是谢谢你。太糟糕了。祝您好运:)如果您的路径是相对的,并且看起来是这样的:dir1/in/dir2
,那么您应该针对字段-f1
,而不是-f2
,解决方案应该输出home
而不是/home/user/example/foo
。
#home#
DIR="/home/user/example/foo/bar"
[[ "$DIR" =~ ^[/][^/]+ ]] && printf "$BASH_REMATCH"
/home/user/example/foo