Shell脚本——提取目录名和文件名

在许多场景下,我们都需要对文件名称或者文件所在的目录进行操作,已达到我们业务目的。通常的操作是由路径中提取文件名,从路径中提取目录名,提取文件后缀等等一系列的操作。

一、${}

1.${var##*/}


该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:  
首先定义变量var一个值
[root@localhost ~]# var=/dir1/dir2/file.txt              
[root@localhost ~]# echo ${var##*/}
file.txt

2.${var##*.}


该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo ${var##*.}
txt

3.${var#*.}

该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.tar.gz
[root@localhost ~]# echo ${var#*.}
tar.gz

4.${var%/*}

该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo ${var%/*}
/dir1/dir2

5.${var%%.*}


该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:
[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo ${var%%.*}
/dir1/dir2/file

6.总结

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

符号定义
#从左开始第一个
%从右边开始第一个
##从左边开始最后一个
%%从右边开始最后一个

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

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

[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo $(basename $var)
file.txt

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

[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# echo $(basename $var .txt)
file

2.dirname

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

[root@localhost ~]# var=/dir1/dir2/file.txt
[root@localhost ~]# dirname $var
/dir1/dir2

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

[root@localhost ~]# var=/dir1/dir2/
[root@localhost ~]# dirname $var
/dir1

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/11277

(0)
凯影的头像凯影
上一篇 2024年2月6日 下午3:03
下一篇 2024年2月19日 上午11:30

相关推荐

  • Windows 操作系统命令行 netsh winsock reset 的作用详解

    这个命令是一个用于 Windows 操作系统中的网络故障排除工具,它用于重置 Winsock 相关的配置,以解决与网络连接和通信相关的问题。 命令解释: 使用场景:命令netsh winsock reset在以下情况下非常有用: 命令示例:假设您的计算机无法通过浏览器访问互联网。您可以按照以下步骤使用netsh winsock reset命令来尝试解决问题:…

    2023年8月28日
    2.9K00
  • Linux下安装配置maven仓库

    1、安装wget命令 如果需要通过使用wget命令,直接通过网络下载maven安装包时,需要在linux系统中安装wget命令。 2、下载maven安装包 在/usr/local/下创建一个maven文件: mkdir /usr/local/maven 切换到安装目录,即新建的文件中: 下载安装: 3、解压缩maven 4、配置maven环境变量 添加环境变…

    2022年6月20日
    2.2K00
  • systemd:实现 Linux 服务 Crash 后自动重启systemd:

    Systemd 允许你对服务进行配置,以便在服务崩溃时自动重启。 一个典型的单元文件是这样的: 在上面的例子中,如果守护进程崩溃或被杀死,systemd 不会去管它。 不过,你可以让 systemd 自动重启守护进程,以防它崩溃或意外被杀掉。为此,你可以在 [Service] 中添加 Restart 选项。典型的示例如…

    2023年8月14日
    2.8K00
  • 幻兽帕鲁服务器一键部署保姆教程

    普通一键部署(使用一键部署脚本) Windows 服务器一键部署 Windows的一键部署需要借助 PowerShell 来完成。PowerShell是一种任务自动化和配置管理框架,它提供了一个命令行Shell和脚本语言,用于管理和控制Windows操作系统和相关应用程序。那么要如何找到 PowerShell ?方法如下: 方法 描述 使用开始菜单 点击Wi…

    2024年1月30日
    1.2K00
  • PowerShell关于磁盘IO的信息获取

    理论上的磁盘I/O(输入/输出)最大值通常与磁盘的规格、类型和制造商有关,而不是通过计数器统计得出的当前值。在PowerShell中,获取这种理论上的最大I/O值可能会比较困难,因为它不是一个直接提供的属性。但您可以尝试通过查询硬件规格或制造商的信息来获取一些估算值。 以下是一种基本的方法,它使用Get-PhysicalDisk cmdlet获取物理磁盘的信…

    2023年12月12日
    1.8K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信