Linux下截取给定路径中的目录部分
在日常运维中,有时会要求截取一个路径中的目录部分。
截取目录的方法,有以下两种:
1)dirname命令(最常用的方法):用于取给定路径的目录部分。很少直接在shell命令行中使用,一般把它用在shell脚本中,用于取得脚本文件所在目录,然后将当前目录切换过去。
其实就是取所给路径的倒数第二级及其之前的路径部分,如下:
1 2 3 4 5 6 7 8 9 10 11 12 | [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 |
###########################################################
还有一个"basename"命令,用于截取一个path中最后一个
1 2 3 4 | [root@jenkins-server Shell] # dirname /usr/local/src/ /usr/local [root@jenkins-server Shell] # basename /usr/local/src/ src |
2)可以用${pathname%/*}截取掉pathname后面的文件部分。可以参考: https://www.cnblogs.com/kevingrace/p/8868262.html
下面比较下这两种方法的效果:即dirname取的是倒数第二级及其以上级的路径,而${pathname%/*}取的是"删除最后一个/符号后的路径部分"
1 2 3 4 5 6 7 8 9 | [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也可以实现这种功能,实例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [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 |
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
分类:
Shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!