前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟短文,Linux用户操作文件名,这个内部指令更高效!

3分钟短文,Linux用户操作文件名,这个内部指令更高效!

作者头像
程序员小助手
发布2022-08-22 15:44:04
4850
发布2022-08-22 15:44:04
举报
文章被收录于专栏:程序员小助手程序员小助手

引言

basename是一个命令行实用程序,可从给定的文件名中删除目录和后缀。

使用basename命令

该basename命令支持两种语法格式:

代码语言:javascript
复制
basename NAME [SUFFIX]  basename OPTION ... NAME ... 

basename接受文件名并打印文件名的最后一部分。作为可选项,它也可以删除任何指定结尾的后缀。

basename 是一个简单的命令,仅接受一些选项。

最基本的示例,打印出除去前置目录的文件名:

代码语言:javascript
复制
basename /etc/passwd

输出将仅包含文件名:

代码语言:javascript
复制
passwd

该basename命令删除所有结尾/字符:

代码语言:javascript
复制
basename /usr/local/
basename /usr/local

这两个命令将产生相同的输出:

代码语言:javascript
复制
local
local

默认情况下,每个输出行以换行符结尾。要以结尾NUL,请使用-z(--zero)选项。

多个输入

该basename命令可以同时接受多个参数。那么,请使用-a(--multiple)选项调用命令,然后文件列表以空格符分隔。

例如,要获得/etc/passwd和/etc/shadow 的文件名,只需运行:

代码语言:javascript
复制
basename -a /etc/passwd /etc/shadow

输出内容如下:

代码语言:javascript
复制
passwd
shadow

删除尾部的后缀

要从文件名中删除任何结尾的后缀,只用将后缀作为第二个参数传递:

代码语言:javascript
复制
basename /etc/hostname name

那么原本输出是 hostname,因为有指定的第二个屏蔽的后缀,过滤掉 name 之后,就只剩下 host 字符串进行了输出。

通常,此功能用于删除文件的扩展名:

代码语言:javascript
复制
basename /etc/sysctl.conf .conf
// 输出 sysctl

另一种删除指定屏蔽后缀的方式,是使用-s(--suffix=SUFFIX)选项指定后缀:

代码语言:javascript
复制
basename -s .conf /etc/sysctl.conf
// 输出 sysctl

此语法格式可以让你从多个名称中,删除任何结尾的后缀:

代码语言:javascript
复制
basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf
// 输出 
sysctl
sudo

综合举例

以下示例显示了如何在 bash for 循环中使用 basename 命令,将扩展名“ .jpeg”替换为“ .jpg” ,并将文件重命名。

代码语言:javascript
复制
for file in *.jpeg; do
    mv -- "$file" "$(basename $file .jpeg).jpg"done

如果文件量比较大,这样可以节省许多不必要的时间。

写在最后

本文通过简单地介绍,举例说明了 Linux 系统文件操作中,比较常用的 basename 指令。

通过一个综合的实例,展示了 basename 配合 bash 使用的威力。

Happy coding :-)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 使用basename命令
  • 多个输入
  • 删除尾部的后缀
  • 综合举例
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档