Linux basename命令教程:如何删除路径名和文件扩展名(附实例详解和注意事项)

发布时间:2023年12月26日

Linux basename命令介绍

basename命令是一个标准的Unix和类Unix系统上的程序。它的作用是从给定的文件名或路径名中删除任何前导的目录信息和后缀,只返回文件名的最后一部分。basename命令主要用于shell脚本中,可以方便地提取文件名或路径名的基本部分。

Linux basename命令适用的Linux版本

basename命令是一个通用的命令,适用于几乎所有的Linux版本,包括Ubuntu, CentOS, Debian, Fedora等。如果你的Linux系统没有安装basename命令,你可以使用以下命令来安装:

  • 对于基于Debian的系统,如Ubuntu,你可以使用apt-get命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install coreutils
  • 对于基于Red Hat的系统,如CentOS,你可以使用yum命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum install coreutils
  • 对于基于Arch的系统,如Manjaro,你可以使用pacman命令:
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S coreutils

Linux basename命令的基本语法

basename命令的基本语法格式有两种:

basename NAME [SUFFIX]
basename OPTION... NAME...

其中,NAME表示文件名或路径名,SUFFIX表示要删除的后缀,OPTION表示basename命令支持的选项。

Linux basename命令的常用选项或参数说明

basename命令支持的选项或参数有以下几个:

选项参数说明
-a–multiple支持多个输入,将每个输入都视为一个NAME
-s–suffix=SUFFIX删除一个后缀SUFFIX,如文件扩展名
-z–zero用NUL而不是换行符来分隔输出
–help显示帮助信息并退出
–version显示版本信息并退出

Linux basename命令的实例

以下是一些使用basename命令的实例,结合了一些常见的搜索关键词。

如何使用basename命令删除路径名

如果你只想获取文件名,而不需要路径名,你可以使用basename命令来删除路径名,例如:

[linux@bashcommandnotfound.cn ~]$ basename /etc/passwd
passwd

这个命令会输出文件名passwd,而不包含/etc/目录。

如何使用basename命令删除文件扩展名

如果你想获取文件名,但不需要文件扩展名,你可以使用basename命令来删除文件扩展名,例如:

[linux@bashcommandnotfound.cn ~]$ basename /etc/sysctl.conf .conf
sysctl

这个命令会输出文件名sysctl,而不包含.conf扩展名。你也可以使用-s选项来指定要删除的后缀,例如:

[linux@bashcommandnotfound.cn ~]$ basename -s .conf /etc/sysctl.conf
sysctl

这个命令和上一个命令的效果是一样的。

如何使用basename命令处理多个输入

如果你想一次处理多个文件名或路径名,你可以使用-a选项来支持多个输入,例如:

[linux@bashcommandnotfound.cn ~]$ basename -a /etc/passwd /etc/shadow
passwd
shadow

这个命令会输出两个文件名,分别是passwd和shadow,每个文件名占一行。

如何使用basename命令在shell脚本中重命名文件

如果你想在shell脚本中使用basename命令来重命名文件,你可以结合mv命令来实现,例如,以下是一个shell脚本,它可以将当前目录下所有的.jpeg文件的扩展名改为.jpg:

#!/bin/sh
for file in *.jpeg; do
  #退出如果没有文件
  if [ ! -f $file ]; then
    exit
  fi
  b=$(basename $file .jpeg)
  echo NOW $b.jpeg is $b.jpg
  mv -- "$file" "$(basename $file .jpeg).jpg"
done

这个脚本会遍历当前目录下的所有.jpeg文件,使用basename命令来提取文件名的基本部分,然后使用mv命令来重命名文件,并输出重命名的结果。

Linux basename命令的注意事项

使用basename命令时,有以下几点需要注意:

  • basename命令会删除任何后面的/字符,例如:
[linux@bashcommandnotfound.cn ~]$ basename /usr/local/
local

这个命令会输出local,而不是空字符串。

  • basename命令只能删除一个后缀,如果有多个后缀,需要多次使用basename命令,例如:
[linux@bashcommandnotfound.cn ~]$ basename /etc/sysctl.conf.dpkg-dist .dpkg-dist
sysctl.conf
[linux@bashcommandnotfound.cn ~]$ basename $(basename /etc/sysctl.conf.dpkg-dist .dpkg-dist) .conf
sysctl

这个命令会先删除.dpkg-dist后缀,再删除.conf后缀,最后输出sysctl。

  • 如果你的系统没有安装basename命令,你可能会看到以下错误信息:
bash: basename: command not found

这时,你需要根据你的Linux版本,使用相应的安装命令来安装coreutils包,如前面所述。

更多详细内容可以参考:
linux入门学习教程 - Linux入门自学网
Linux mesg命令详解:如何控制终端消息权限(附实例教程和注意事项)

文章来源:https://blog.csdn.net/u012964600/article/details/135056030
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。