shell中提取文件名或目录名

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

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

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

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

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

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

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

如果文件的后缀不仅有一个,例如,file.tar.gz,命令KaTeX parse error: Expected '}', got '#' at position 5: {var#̲#*.}仅能提取最后一个后缀,…{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://www.jb51.net/article/101569.htm

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: zip命令是用来创建、压缩和解压缩zip文件的命令,它的基本语法如下: ``` zip [选项] 压缩文件名.zip 源文件或目录 ``` 其,选项可以包括: - -r:递归地压缩目录及其子目录的文件 - -q:静默模式,不输出任何信息 - -v:详细模式,输出压缩过程的详细信息 - -d:删除压缩文件的指定文件 - -x:排除指定的文件或目录 例如,要压缩目录`/home/user/data`并将压缩文件保存为`data.zip`,可以执行以下命令: ``` zip -r data.zip /home/user/data ``` 要解压缩zip文件,可以使用unzip命令,例如: ``` unzip data.zip ``` ### 回答2: 在Shell,zip命令是用来压缩文件和目录的工具。它可以将多个文件和目录打包成一个压缩文件,以便在不同的环境进行传输和存储。 使用zip命令非常简单,只需在命令行输入zip,紧随其后的是要创建的压缩文件的名称,然后是要压缩的文件和目录的列表。 例如,要将文件file1.txt和目录dir1压缩成名为archive.zip的压缩文件,可以使用以下命令: ``` zip archive.zip file1.txt dir1 ``` 此外,zip命令还提供了一些选项,以便更好地控制压缩过程。一些常用的选项包括: - -r:递归地压缩目录及其下的所有文件和子目录。 - -q:安静模式,不显示压缩进度信息。 - -d:从压缩文件删除指定的文件或目录。 - -u:只压缩源文件新添加或修改的文件。 值得一提的是,zip命令还可以与其他命令结合使用,例如使用管道将文件压缩后直接发送到另一个命令的输入。 总而言之,zip命令是一个非常实用的工具,可以方便地将文件和目录打包成压缩文件,以便在不同的环境使用和传输。通过灵活使用zip命令的选项,我们可以更好地控制和定制压缩过程,提高工作效率。 ### 回答3: zip命令是在shell(命令行界面)使用的一种压缩命令。它用于创建或提取ZIP格式的压缩文件。 在创建压缩文件时,使用zip命令需要指定压缩文件的名称,并且可以选择要被压缩的文件或目录。例如,要压缩名为archive.zip的文件夹,可以在shell输入以下命令: zip -r archive.zip foldername 其,-r选项表示递归地将文件夹的所有文件和子文件夹都压缩到压缩文件。 在提取(解压)压缩文件时,使用zip命令需要指定要被提取的压缩文件的名称,并且可以选择要将文件提取到的目录。例如,要将名为archive.zip的压缩文件解压到当前目录,可以在shell输入以下命令: unzip archive.zip 默认情况下,zip命令会将压缩文件提取到当前目录下。如果要将文件提取到指定的目录,可以使用-d选项,后面跟着要将文件提取到的目录的路径。例如,要将压缩文件解压到名为folder的文件夹,可以在shell输入以下命令: unzip archive.zip -d folder 另外,zip命令还提供了其他一些选项,用于控制压缩文件的行为,例如压缩级别、包含或排除特定类型的文件等。这些选项可以通过查看zip命令的帮助文档来了解。 综上所述,zip命令是在shell用于创建和提取ZIP格式压缩文件的命令。它可以通过简单的命令行参数来实现压缩和解压操作,并提供了一些选项来自定义操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值