從文件路徑獲取文件目錄路徑

在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
相關文章
相關標籤/搜索