How-To get root directory of given path in bash?

孤街浪徒 提交于 2019-12-01 13:58:42

问题


My script:

    #!/usr/bin/env bash
    PATH=/home/user/example/foo/bar
    mkdir -p /tmp/backup$PATH

And now I want to get first folder of "$PATH": /home/

    cd /tmp/backup
    rm -rf ./home/
    cd - > /dev/null

How can I always detect the first folder like the example above? "dirname $PATH" just returns "/home/user/example/foo/".

Thanks in advance! :)


回答1:


I've found a solution:

    #/usr/bin/env bash
    DIRECTORY="/home/user/example/foo/bar"
    BASE_DIRECTORY=$(echo "$DIRECTORY" | cut -d "/" -f2)
    echo "#$BASE_DIRECTORY#";

This returns always the first directory. In this example it would return following:

    #home#

Thanks to @condorwasabi for his idea with awk! :)




回答2:


If PATH always has an absolute form you can do tricks like

ROOT=${PATH#/} ROOT=/${ROOT%%/*}

Or

IFS=/ read -ra T <<< "$PATH"
ROOT=/${T[1]}

However I should also add to that that it's better to use other variables and not to use PATH as it would alter your search directories for binary files, unless you really intend to.

Also you can opt to convert your path to absolute form through readlink -f or readlink -m:

ABS=$(readlink -m "$PATH")

You can also refer to my function getabspath.




回答3:


You can try this awk command:

 basedirectory=$(echo "$PATH" | awk -F "/" '{print $2}')

At this point basedirectory will be the string home Then you write:

rm -rf ./"$basedirectory"/



回答4:


To get the first firectory:

path=/home/user/example/foo/bar
mkdir -p "/tmp/backup$path"
cd /tmp/backup
arr=( */ )
echo "${arr[0]}"

PS: Never use PATH variable in your script as it will overrider default PATH and you script won't be able to execute many system utilities

EDIT: Probably this should work for you:

IFS=/ && set -- $path; echo "$2"
home



回答5:


Pure bash:

DIR="/home/user/example/foo/bar"
[[ "$DIR" =~ ^[/][^/]+ ]] && printf "$BASH_REMATCH"

Easy to tweak the regex.



来源:https://stackoverflow.com/questions/24631866/how-to-get-root-directory-of-given-path-in-bash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!