shell 提取文件名和目录名

shell脚本】遍历指定文件夹并获取文件名及大小 目录 1. shell 方法 1.1. shell 脚本 1.1.1. 概述 1.2. 其他问题 1.3. 笨方法 2. c++语言方法 目的: 遍历指定文件夹下的文件,获取其名、路径、大小(bytes); 主要是三类文件, .h .c .cc共3类文件,其中排除单元测试文件 Test开头的 .h 文件; 使用正则匹配,针对路径不规则的情况;目标文件不放在 src 等规则的目录下; 1. shell 方法 1.1. shell 脚本 1.1.1. 概述 对于正则表达式的书写,可 阅读详情
    在写shell脚本中,经常会有需要对路径和文件名做处理。有时候犯不着用sed命令来操作。bash提供的变量操作和一些外部命令都能很好的处理。

一、使用变量操作符 ${}

1、${var##*/}

该方式是从左开始最大化匹配到字符"/",然后截掉左边内容(包括字符"/"),返回余下右侧部分。

$ var=/dir1/dir2/file.txt
$ echo ${var##*/}
file.txt


在shell脚本中,可以使用变量来保存这个结果,再加以利用,如file=${var##*/}

我们将"/" 换成"." 
$ var=/dir1/dir2/file.txt
$ echo ${var##*.}
txt

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

2、${var#*.} 

该方式是从左开始第一次匹配到字符".",然后截掉左边内容(包括字符"."),返回余下右侧部分。

$ var=/dir1/dir2/file.tar.gz
$ echo ${var#*.}
tar.gz
这样就可以提取出文件的多个后缀。但是要注意,之前的路径名中不能含有字符"."。如果含有的话,读者朋友也应该知道该如何处理啦。

3、${var%/*}
该方式是从右开始第一次匹配到字符"/",然后截掉右边内容(包括字符"/"),返回余下左侧部分。
$ var=/dir1/dir2/file.txt
$ echo ${var%%/*}
/dir1/dir2
这样可以提取出我们需要的文件所在的路径

4、${var%%.*}
该方式是从右开始最大化匹配到字符".",然后截掉右边内容(包括字符"."),返回余下左侧部分。这里就不举例说明了。

方法一总结
bash提供的变量操作方法很多,不过这四个对于字符串截取基本够用了。

有一个方便记忆的方法,我们看键盘,"#"在"%"的左边,当使用#的时候,就说明截掉左边的内容,反之%就是从右边开始截掉。而##和%%就是最大化的截掉。

*:表示要删除的内容,另外还需要一个字符表示戒掉点。

例如:${var%%x*}表示找出从右侧开始最大化的查找到字符"x",并删除字符x及其右边的字符。


二、basename和dirname

basename和dirname命令是专门用来截取文件名和路径名的。

1、basename
该命令的作用提取文件名,使用方法为basename NAME [SUFFIX]。
1)从路径中提出出文件名(带后缀),例子如下:
$ var=/dir1/dir2/file.txt
$ echo $(basename ${var})
file.txt

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


2、dirname

该命令的作用是从路径中提取出路径名,使用方法为 dirname NAME
使用例子如下:
$ var=/dir1/dir2/file.txt
$ echo $(dirname ${var})
/dir1/dir2
这样就提取出了file.txt文件所在的路径。
注意:该命令不仅能提取出普通文件所在目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:
$ var=/dir1/dir2/
$ echo $(dirname ${var})
/dir1
它提取出了目录dir2所在的目录dir1,所以在使用中要注意到这一点。
Linux shell 提取文件名目录名的方法 很多时候在使用Linux的shell时,我们都需要对文件名目录名进行处理,通常的操作是由路径中提取文件名,从路径中提取目录名提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。 下面介绍两种常用的方法来进行相关的操作。 一、使用1、{} 1、1、{var##*/} 该命令的作用是去掉变量var从左边算起的最后一个’/‘字符及其左边的内容,返回从左边算起的最后一个’/’(不含该字符)的右边的内容。 阅读详情

相关推荐

shell中#*,##*,#*,##*,% *,%% *的含义及用法

介绍下Shell中的${}、##%%使用范例,本文给出了不同情况下得到的结果。 假设定义了一个变量为: 代码如下: file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值: ${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:删掉最后一个 / 及其左边的字符串:m...

巡山小妖008 1761

shell 提取文件名目录名的一些方法

一、使用${}1、${var##*/}该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:[linux@test: ] var=/home/user/1.txt[linux@test: ] echo ${var##*/}1.txt该操作提取路径下的文件名1.txt2、${var...

weixin_33739627的博客 370

linux shell命令${}basenamedirname的学习

${}并不是专门为提取文件名目录名的,它的使用是变量的提取替换等等操作,它可以提取非常多的内容,并不一定是'/'或'.' #:表示从左边算起第一个,如${var#/} 去掉变量var从左边算起的第一个'/'字符及其左边的内容,返回从左边算起的第一个'/'的右边的内容 %:表示从右边算起第一个,如${var%/*} 去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起

xianjie0318的博客 2057

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

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

jajavaja的专栏 1352

linux提取输入目录的文件名,Linux shell 提取文件名目录名的方法

${}[root@node01 ~]# file=/dir1/dir2/dir3/my.file.txt[root@node01 ~]# echo ${file#*/}dir1/dir2/dir3/my.file.txt删掉第一个 / 及其左边的字符串[root@node01 ~]# echo ${file##*/}my.file.txt删掉最后一个 / 及其左边的字符串[root@node01...

weixin_39677538的博客 148

linux shell文件名,Linux shell提取文件名目录名的一些方法

不少时候在使用Linux的shell时,咱们都须要对文件名目录名进行处理,一般的操做是由路径中提取文件名,从路径中提取目录名提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。shell下面介绍两种经常使用的方法来进行相关的操做。设计1、使用${}指针一、${var##*/}该命令的做...

weixin_35853083的博客 524

linux如何提取文件名,Linux shell 提取文件名目录名的方法

${}[root@node01 ~]# file=/dir1/dir2/dir3/my.file.txt[root@node01 ~]# echo ${file#*/}dir1/dir2/dir3/my.file.txt删掉第一个 / 及其左边的字符串[root@node01 ~]# echo ${file##*/}my.file.txt删掉最后一个 / 及其左边的字符串[root@node01...

weixin_39979080的博客 387

Linux shell提取文件名目录名

用于字符串的读取,提取替换功能,可以使用用于字符串的读取,提取替换功能,可以使用{} 提取字符串 1、提取文件名 [root@localhost log]# var=/dir1/dir2/file.txt [root@localhost log]# echo ${var##*/} file.txt 2、提取后缀 [root@localhost log]# echo ${var...

suojie的博客 2423

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

${} basename dirname

一坨小橙子的博客 4155

shell提取文件名目录名

很多时候在使用Linux的shell时,我们都需要对文件名目录名进行处理,通常的操作是由路径中提取文件名,从路径中提取目录名提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。 下面介绍两种常用的方法来进行相关的操作。 一、使用1、{} 1、1、{var##*/} 该命令的作用是去掉变...

S____M的博客 2899

Linux Shell 点滴 - 提取文件名/目录名

提取文件名/目录名 $ var=/dir1/dir2/test.cpp.txt $ echo ${var} /dir1/dir2/test.cpp.txt $ echo ${var#*.} cpp.txt $ echo ${var##*.} txt $ echo ${var%.*} /dir1/dir2/test.cpp $ echo ${var%%.*} /dir1/dir2/test $ echo $(basename $var) test.cpp.txt $ echo $(basenam

whose book 的博客 176
上一篇: lsof 一切皆文件
下一篇: grep 命令细讲
universe_hao
博客等级 码龄10年 35粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值