系统环境
Centos7
如何利用basename命令

在Centos7系统中,已经默认安装了basename命令了,该命令包含在coreutils安装包里。
basename有两种语法:
basename NAME [SUFFIX]basename OPTION... NAME...
basename末了一部分。也可以删除任何结尾的后缀。这是一个大略的命令,最基本的是去掉文件明前面的目录并打印出来:
[root@localhost ~]# basename /etc/yum.repos.d/CentOS-Base.repo CentOS-Base.repo
basename命令默认删除所有结尾的/字符:
[root@localhost ~]# basename /usr/local/local[root@localhost ~]# basename /usr/locallocal
默认情形下,每条输出行以换行符(\n)结尾。要以NUL结尾,请利用-z(--zero)选项。
[root@localhost ~]# basename -z /usr/locallocal[root@localhost ~]#
basename接管多个文件
basename命令可以接管多个名称作为参数。可以利用-a(--multiple)选项,然后利用空格分隔文件列表。例如,要获取/etc/passwd和/etc/shadow的文件名,可以运行:
[root@localhost ~]# basename -a /etc/passwd /etc/shadowpasswdshadow
删除指定结尾的后缀
要从文件名中删除任何结尾的后缀,请将后缀作为第二个参数通报:
[root@localhost ~]# basename /etc/hostname namehost另一种方法:[root@localhost ~]# basename -s name /etc/hostname host
上面例子中,指定name为后缀,可以看到输出结果中只显示/后面和name前面的内容了。
常日,此功能用于删除文件的扩展名:
[root@localhost ~]# basename -s .conf /etc/httpd/conf/httpd.confhttpd或者[root@localhost ~]# basename /etc/httpd/conf/httpd.conf .confhttpd
下面例子,利用-a选项指定多个文件,-s选项指定后缀内容:
[root@localhost ~]# basename -a -s .conf /etc/sysctl.conf /etc/httpd/conf/httpd.conf sysctlhttpd
删除末端后缀的另一种方法是利用-s(--suffix = SUFFIX)选项指定后缀。上面实例中以展现。
利用实例
以下示例显示了如何在bash脚本中利用for循环、mv命令和basename命令,通过将当前目录下面的图片文件,文件扩展名从“ .jpg”更换为“ .jpeg”:
[root@localhost test]# vim convert.sh #!/bin/bashfor file in .jpgdo mv "$file" "$(basename $file .jpg).jpeg"done
总结
basename是一个命令行实用程序,可从给定的文件名中删除目录和后缀。