彩世界开奖app官网-彩世界平台官方网址(彩票平台)
做最好的网站
来自 彩世界开奖app官网 2019-11-28 05:08 的文章
当前位置: 彩世界开奖app官网 > 彩世界开奖app官网 > 正文

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

ghostwu@dev:~$ basename ./linux/rename/1.htm .htm
1

描述
字符串basename (字符串$路径[ ,字符串$后缀] )
鉴于一个字符串包含路径的文件,该函数将返回基地的档案名称。

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

ghostwu@dev:~/linux/rename$ rename 's/.html//' *.html
ghostwu@dev:~/linux/rename$ ls
1    14  2   25  30  36  41  47  52  58  63  69  74  8   85  90  96
10   15  20  26  31  37  42  48  53  59  64  7   75  80  86  91  97
100  16  21  27  32  38  43  49  54  6   65  70  76  81  87  92  98
11   17  22  28  33  39  44  5   55  60  66  71  77  82  88  93  99
12   18  23  29  34  4   45  50  56  61  67  72  78  83  89  94
13   19  24  3   35  40  46  51  57  62  68  73  79  84  9   95

参数

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

 

返回值
返回基地名称指定路径。

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

s:表示替换,  //两个斜杠中没有内容,表示.html 替换为空

路径
一个路径。

1、basename

ghostwu@dev:~/linux/rename$ ls
ghostwu@dev:~/linux/rename$ touch {1..100}.html
ghostwu@dev:~/linux/rename$ ls
100.html  21.html  33.html  45.html  57.html  69.html  80.html  92.html
10.html   22.html  34.html  46.html  58.html  6.html   81.html  93.html
11.html   23.html  35.html  47.html  59.html  70.html  82.html  94.html
12.html   24.html  36.html  48.html  5.html   71.html  83.html  95.html
13.html   25.html  37.html  49.html  60.html  72.html  84.html  96.html
14.html   26.html  38.html  4.html   61.html  73.html  85.html  97.html
15.html   27.html  39.html  50.html  62.html  74.html  86.html  98.html
16.html   28.html  3.html   51.html  63.html  75.html  87.html  99.html
17.html   29.html  40.html  52.html  64.html  76.html  88.html  9.html
18.html   2.html   41.html  53.html  65.html  77.html  89.html
19.html   30.html  42.html  54.html  66.html  78.html  8.html
1.html    31.html  43.html  55.html  67.html  79.html  90.html
20.html   32.html  44.html  56.html  68.html  7.html   91.html

在Windows中,这两个斜线( / )和反斜杠( )作为目录分隔符。在其他环境中,它是正斜杠( / ) 。

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

rename:重命名文件,

例如# 1 basename ( )例子

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

5,basename,返回路径中的文件名部分

修改

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

2,通过rename 正则表达式,把.html后缀去掉

basename
( PHP 4中, PHP 5中)

二、basename和dirname

6,basename, 返回路径中的文件名,不包括后缀

版本说明
4.1.0的后缀参数增加

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

3,在文件末尾添加.html后缀

实例

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

ghostwu@dev:~$ dirname ./linux/rename/1.htm 
./linux/rename

<?php
$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
?>

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

ghostwu@dev:~$ basename ./linux/rename/1.htm 
1.htm

后缀
如果后缀结尾的文件名也将被切断。

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

我下面的操作是在ubuntu16.04发行版 演示的,centos下面的语法有些不同

basename -返回文件路径的组成部分

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

7,dirname,返回文件的路径部分

下面来看看提供一关于件路径的组成部分basename函数实例教程

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

ghostwu@dev:~/linux/rename$ ls
1    14  2   25  30  36  41  47  52  58  63  69  74  8   85  90  96
10   15  20  26  31  37  42  48  53  59  64  7   75  80  86  91  97
100  16  21  27  32  38  43  49  54  6   65  70  76  81  87  92  98
11   17  22  28  33  39  44  5   55  60  66  71  77  82  88  93  99
12   18  23  29  34  4   45  50  56  61  67  72  78  83  89  94
13   19  24  3   35  40  46  51  57  62  68  73  79  84  9   95
ghostwu@dev:~/linux/rename$ rename 's/$/.html/' *
ghostwu@dev:~/linux/rename$ ls
100.html  21.html  33.html  45.html  57.html  69.html  80.html  92.html
10.html   22.html  34.html  46.html  58.html  6.html   81.html  93.html
11.html   23.html  35.html  47.html  59.html  70.html  82.html  94.html
12.html   24.html  36.html  48.html  5.html   71.html  83.html  95.html
13.html   25.html  37.html  49.html  60.html  72.html  84.html  96.html
14.html   26.html  38.html  4.html   61.html  73.html  85.html  97.html
15.html   27.html  39.html  50.html  62.html  74.html  86.html  98.html
16.html   28.html  3.html   51.html  63.html  75.html  87.html  99.html
17.html   29.html  40.html  52.html  64.html  76.html  88.html  9.html
18.html   2.html   41.html  53.html  65.html  77.html  89.html
19.html   30.html  42.html  54.html  66.html  78.html  8.html
1.html    31.html  43.html  55.html  67.html  79.html  90.html
20.html   32.html  44.html  56.html  68.html  7.html   91.html

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

1,首先,生成1到100命名的.html后缀的文件

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

ghostwu@dev:~/linux/rename$ rename 's/.html/.htm/' *
ghostwu@dev:~/linux/rename$ ls
100.htm  19.htm  28.htm  37.htm  46.htm  55.htm  64.htm  73.htm  82.htm  91.htm
...

3、${var#*.}
该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:
彩世界开奖app官网 2
从运行结果可以看到,使用该命令,可以提取出文件的多个后缀。

4,把.html后缀替换为.htm

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

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

 

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

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

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

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

${var%%.*}
该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:
彩世界开奖app官网 4
当我们需要建立一个与文件名相同名字(没有后缀)的目录与对应的文件相对应时,就可以使用该命令来进行操作。例如,解压文件的情况就与此类似,我们压缩文件file.zip时,会在与file.zip同级目录下建立一个名为file的目录。

2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:
彩世界开奖app官网 5
dirname
该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME
使用例子如下:
彩世界开奖app官网 6
这样就提取出了file.txt文件所在的目录。

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

注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:
彩世界开奖app官网 7
它提取出了目录dir2所在的目录dir1.

4、${var%/*}
该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:
彩世界开奖app官网 8
从运行的结果可以看到,使用该命令,可以提取出我们需要的文件所在的目录

一、使用${}

彩世界开奖app官网 9

本文由彩世界开奖app官网发布于彩世界开奖app官网,转载请注明出处:Linux shell 提取文件名和目录名的一些方法(转)

关键词: shell