linux路径截取,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/

/usr

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

/home/wang

/web/www

/data/mongodb/smsb

/tmp/abc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值