`

(转) Linux shell 之 提取文件名和目录名的一些方法

阅读更多

转自:http://blog.csdn.net/ljianhui/article/details/43128465

并感谢原作者的总结,此处作为一个收藏。

 

很多时候在使用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.
分享到:
评论

相关推荐

    Linux shell 之 提取文件名和目录名的一些方法总结

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

    Linux shell 提取文件名和目录名的方法

    本文将详细介绍如何在Linux shell中提取文件名和目录名。 在shell中,我们可以利用特殊变量`$file`存储文件路径,然后使用特定的语法结构来提取所需的组件。以下是一些常用的方法: 1. **提取目录名**: - `${...

    linux写shell需要注意的问题(必看)

    一定要vi crontab.sh来写 ... 您可能感兴趣的文章:一天一个shell命令 linux文本操作系列-tree命令详解Linux shell 之 提取文件名和目录名的一些方法总结Linux shell常用的73条命令总结Linux下使用shell脚本自动执行脚本

    使用Bash Shell获取文件名和目录名的简单方法

    ### 使用Bash Shell获取文件名和目录名的简单方法 #### 前言 在日常的脚本编写或系统管理工作中,我们经常会遇到需要解析文件路径的情况,以便从中提取文件名或者目录名。Bash Shell作为Linux和Unix系统中常用的...

    提取当前目录下的文件名 提取文件下的所有文件的名字

    总的来说,无论是在命令行界面还是编程环境中,都有多种方法可以实现提取当前目录下所有文件名的功能。选择哪种方法取决于具体需求和个人喜好,熟练掌握这些技能对于日常的系统管理和自动化工作至关重要。

    Linux shell脚本编写基础

    而在Linux环境中,shell脚本编写则是系统管理、自动化运维和开发工作中的一项基本技能。Shell脚本不仅能将复杂的系统命令组合成自动化任务,还能够实现条件判断、流程控制等功能,极大提高工作效率。 脚本的名称...

    linux shell example例子

    从给定的Linux Shell脚本示例中,我们可以提炼出一系列关键知识点,这些知识点涵盖了Shell编程的基本结构、流程控制、变量处理以及系统操作等方面。下面将详细解释这些知识点: ### 知识点一:基本输入输出与循环...

    Linux shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 ...

    Linux环境下shell编程

    16. **basename**和**dirname**: 分别用于获取文件名和目录名。例如:`basename /path/to/file`得到`file`,`dirname /path/to/file`得到`/path/to`。 17. **head**和**tail**: 显示文件头部或尾部的一部分内容。...

    linux实验shell编程.pdf

    由于给定文件信息中【标题】和【描述】内容相同,并且【标签】为空,【部分内容】虽然部分文字可能由于OCR扫描技术原因出现错误或遗漏,但依旧可以提取出与Linux和Shell编程相关的一些关键词和概念。以下是基于给定...

    shell编程(Linux系统)

    在Shell编程中,有一些基本的概念和命令是必须掌握的,下面列举了一些常见的例子: - **Shebang(#!)**:Shell脚本的第一行通常是`#!/bin/sh`或`#!/bin/bash`,这行被称为shebang,它告诉系统使用哪个解释器来运行...

    Linux shell 脚本全面学习

    本文档提供了 Linux shell 脚本编程的基础知识和实用技巧,帮助读者理解如何创建和管理 shell 脚本。通过对语法结构、变量、命令以及流程控制的学习,开发者可以更加高效地开发出复杂且功能强大的脚本程序。此外,...

    LINUX与UNIX SHELL编程指南

    《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和Unix系统中Shell编程的权威教程。Shell作为操作系统与用户交互的重要桥梁,是系统管理员和程序员进行自动化任务处理的必备工具。通过学习Shell编程,我们可以...

    Linux中shell脚本获取当前工作目录的方法

    总结来说,获取Linux Shell脚本中的当前工作目录主要依赖于`$0`、`dirname`、`cd`、`pwd`这些命令的组合使用,以及对环境变量和命令替换的理解。理解这些基本概念和命令对于编写复杂的Shell脚本至关重要。通过灵活...

    Linux Shell编程(基础教程

    ### Linux Shell编程基础教程 #### 1. Linux 脚本编写基础 ##### 1.1 语法基本介绍 在 Linux 系统中,Shell 脚本是一种强大的工具,可以自动化许多日常任务。理解其基本语法对于有效地使用 Shell 编程至关重要。 ...

    Linux脚本编写语法基础介绍-shell基础

    - `basename`和`dirname`: 提取文件名或路径。 - `head`和`tail`: 显示文件头或尾部的部分内容。 - `sed`和`awk`: 强大的文本处理工具,用于搜索、替换和数据提取。 此外,shell脚本支持使用管道(`|`)将多个命令...

    Linux_Shell基础使用_嵌入式-常用知识&面试题库_大厂面试真题.pdf

    其他如`cut`、`cat`、`file`、`read`、`sort`、`uniq`、`expr`、`find`、`tee`、`basename`、`dirname`、`head`、`tail`和`sed`等命令分别用于...同时输出到屏幕和文件、提取文件名、路径名、显示文件开头或结尾的部分...

Global site tag (gtag.js) - Google Analytics