从文件路径获取文件目录路径

在Bash中,若是VAR="/home/me/mydir/file.c" ,我该如何得到"/home/me/mydir"spa


#1楼

$ export VAR=/home/me/mydir/file.c
$ export DIR=${VAR%/*}
$ echo "${DIR}"
/home/me/mydir

$ echo "${VAR##*/}"
file.c

避免依赖basenamedirname code


#2楼

若是您关注目标文件是符号连接,首先您能够检查它并获取原始文件。 如下if条款能够帮助您。 递归

if [ -h $file ]
then
 base=$(dirname $(readlink $file))
else
 base=$(dirname $file)
fi

#3楼

在相关的说明中,若是您只有文件名或相对路径,则dirname自己无济于事。 对我来讲,答案最终是readlink扩展

fname='txtfile'    
echo $(dirname "$fname")                # output: .
echo $(readlink -f "$fname")            # output: /home/me/work/txtfile

而后,您能够将二者合并为一个目录。 file

echo $(dirname $(readlink -f "$fname")) # output: /home/me/work

#4楼

我正在玩这个,想出了另外一种选择。 脚本

$ VAR=/home/me/mydir/file.c

$ DIR=`echo $VAR |xargs dirname`

$ echo $DIR
/home/me/mydir

我喜欢的部分是扩展备份树很容易: di

$ DIR=`echo $VAR |xargs dirname |xargs dirname |xargs dirname`

$ echo $DIR
/home

#5楼

这是我用于递归修剪的脚本。 固然,将$ 1替换为您想要的目录。 文件

BASEDIR="$1"
IFS=$'\n'
cd $BASEDIR
 for f in $(find . -type f -name ' *')
 do 
    DIR=$(dirname "$f")
    DIR=${DIR:1}
    cd $BASEDIR$DIR
    rename 's/^ *//' *
 done
相关文章
相关标签/搜索