很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。

下面介绍两种常用的方法来进行相关的操作。

一、使用${}

1、${var##*/}
该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:

从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。

若使用时在shell程序文件中,可以使用变量来保存这个结果,再加以利用,如file=${var##*/}

2、${var##*.}
该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下:

从运行结果可以看到,使用该命令,可以提取出我们需要的文件后缀。

如果文件的后缀不仅有一个,例如,file.tar.gz,命令${var##*.}仅能提取最后一个后缀,而我想提取tar.gz时该怎么办?那么就要用下面所说的${var#*.}命令了。

3、${var#*.}
该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:

从运行结果可以看到,使用该命令,可以提取出文件的多个后缀。

4、${var%/*}
该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:

从运行的结果可以看到,使用该命令,可以提取出我们需要的文件所在的目录

5、${var%%.*}
该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:

当我们需要建立一个与文件名相同名字(没有后缀)的目录与对应的文件相对应时,就可以使用该命令来进行操作。例如,解压文件的情况就与此类似,我们压缩文件file.zip时,会在与file.zip同级目录下建立一个名为file的目录。

6、${}总结

其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。

#:表示从左边算起第一个

%:表示从右边算起第一个

##:表示从左边算起最后一个

%%:表示从右边算起最后一个

换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。

例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。

看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。

二、basename和dirname

${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。

1、basename

该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。

1)从路径中提出出文件名(带后缀),例子如下:

2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:

2、dirname
该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME
使用例子如下:

这样就提取出了file.txt文件所在的目录。

注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:

它提取出了目录dir2所在的目录dir1.

本文为转载文章,出处为:传送阵

转载于:https://blog.51cto.com/littledukes/1972236

Linux shell 之 提取文件名和目录名的一些方法相关推荐

  1. linux如何提取文件名称,Linux shell 之 提取文件名和目录名的一些方法总结

    很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等.例如,从路径/dir1/dir2/file.tx ...

  2. linux截取文件名某一段,Linux shell 之 提取文件名和目录名的一些方法总结

    很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等.例如,从路径/dir1/dir2/file.tx ...

  3. linux 获取文件名函数,Linux shell中提取文件名和路径

    前言 有个软件叫HLAreporter,它真的搞人,基本上就是shell脚本联合起来的,关键是居然还有各种小问题,其中之一就是关于文件名和目录名这个,导致程序只能在软件本身的目录运行,然后各种bug, ...

  4. jenkins中使用脚本来节省资源空间和使用shell提取文件名或目录名的方法

    2019独角兽企业重金招聘Python工程师标准>>> 环境 Linux:5.5  jenkins:2.5 场景 由于公司的项目不断增多,导致jenkins拉取的项目也就越来越多,项 ...

  5. Linux shell创建空文件(0字节大小)文件方法

    Linux shell创建空文件(0字节大小)文件方法 echo>fileName创建的文件是1个字节的. 学习后发现创建空文件(0字节大小)的文件有以下几个方法 一.file不存在时,touc ...

  6. linux 按列提取文件名,Linux展示按文件名降序文件

    Linux显示按文件名降序文件 Linux显示按文件名降序文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -lr 总用量 56 drwxr-xr-x ...

  7. linux shell 中判断字符串为空的正确方法

    help命令可以查看帮助 help test 正确做法: #!/bin/sh STRING= if [ -z "$STRING" ]; then     echo "ST ...

  8. linux shell获取文件名和文件目录

    需要获取文件名和文件所在的目录(文件夹).我所知的只有basename, dirname命令. 在网上搜索的时候,结果意外发现了${var##*/} 这样的方式. 以下内容转自: Shell提取文件路 ...

  9. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

最新文章

  1. php 跨进程读写,php使用多个进程同时控制文件读写示例
  2. 内置类和对象锁改变 笔记记录
  3. 看见到洞见之引子(一)机器学习算法
  4. 基于leveldb,levigo做二次开发
  5. linux 端口tnpl,Linux和Windows端口占用情况查看
  6. 信息学奥赛C++语言:求平均分
  7. Jenkins+Github+Nginx实现前端项目自动部署
  8. 彭博社推出“机器学习基础”课程
  9. clickhouse安装教程
  10. python0_python中0o1010是多少
  11. 将报表模板中数据集的数据源名称与服务器中的数据源名称修改一致.,连接数据库,服务器端的几个常见错误...
  12. Python提取PDF简历中的信息,写入Excel
  13. python爬取音乐网站排行榜_使用Python抓取Web端QQ音乐排行榜 批量下载QQ音乐到本地...
  14. 计算机病毒查杀记录,如何看eset nod32防病毒查杀历史记录?
  15. android 左测设置功能,iqoo手机左边按键有什么作用?iqoo手机左侧按键介绍
  16. 凸优化笔记6(共轭梯度法)
  17. windows10计算机管理器,win10设备管理器怎么打开?设备管理器打开的方法
  18. 身份证阅读器(新中新)写入受保护内存问题,已解决
  19. MACD策略引入backtrader出错
  20. 小米对鸿蒙的态度,在提及是否支持鸿蒙时,中兴的态度强硬!小米的立场在意料之外...

热门文章

  1. java 对比工具_Java几款性能分析工具的对比
  2. C++:52---多重继承
  3. PaperNotes(16)-图神经网络GNN简史、不动点建模-笔记
  4. 算法(16)-leetcode-explore-learn-数据结构-二叉树总结
  5. 机器学习问题总结(04)
  6. 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...
  7. STL源码剖析 数值算法 copy 算法
  8. C++primer第九章 顺序容器 9.1 顺序容器概述 9.2容器库概览
  9. C++ primer 第11章 关联容器
  10. Android设计模式之——访问者模式