天天看點

linux下截取給定路徑中的目錄部分

在日常運維中,有時會要求截取一個路徑中的目錄部分。

截取目錄的方法,有以下兩種:

1)dirname指令(最常用的方法):用于取給定路徑的目錄部分。很少直接在shell指令行中使用,一般把它用在shell腳本中,用于取得腳本檔案所在目錄,然後将目前目錄切換過去。

其實就是取所給路徑的倒數第二級及其之前的路徑部分,如下:

[root@jenkins-server Shell]# dirname main/protected/xqsjmob/themes/tpl2/common/page_statistics.tpl

main/protected/xqsjmob/themes/tpl2/common

[root@jenkins-server Shell]# dirname /usr/local/tomcat7/webapps/jenkins/scripts/Shell

/usr/local/tomcat7/webapps/jenkins/scripts

[root@qzt196 ~]# dirname /usr/bin/sort 

/usr/bin

[root@qzt196 ~]# dirname stdio.h //擷取的是目前目錄路徑

.

[root@qzt196 ~]# dirname /usr/bin 

/usr

[root@qzt196 ~]# dirname /usr/bin/ 

2)可以用${pathname%/*}截取掉pathname後面的檔案部分。

下面比較下這兩種方法的效果:即dirname取的是倒數第二級及其以上級的路徑,而${pathname%/*}取的是"删除最後一個/符号後的路徑部分"

[root@jenkins-server Shell]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/*} 

/usr/bin /usr/bin

You have new mail in /var/spool/mail/root

[root@jenkins-server Shell]# pathname=/usr/bin/sort/; echo $(dirname $pathname) ${pathname%/*} 

/usr/bin /usr/bin/sort

[root@jenkins-server Shell]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/*} 

/ /usr

[root@jenkins-server Shell]# pathname=/usr; echo $(dirname $pathname) ${pathname%/*} 

/

除了使用dirname外,sed也可以實作這種功能

執行個體如下:

[root@master-node ~]# cat a.txt 

/home/wang/test.txt

/web/www/test.js

/data/mongodb/smsb/smsb.txt

/tmp/abc/mysql.sock

[root@master-node ~]# sed -n 's:/[^/]*$::p' a.txt

/home/wang

/web/www

/data/mongodb/smsb

/tmp/abc

[root@master-node ~]# for i in `cat /root/a.txt`;do dirname $i;done

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6182573.html,如需轉載請自行聯系原作者