你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

basename——命令行中实用的小工具

[复制链接]
gaosmile 发布时间:2021-1-9 22:26
basename是一个命令行中实用的小工具,可从给定的文件名中删除目录和后缀。
4 v+ \. m* e: n8 U0 H9 d

$ f& A5 W6 s" |5 {7 L) Q
. e8 D- r* z' v( D1 x
系统环境

* T4 F" j# I2 [0 p' @8 w( _
Centos7; k( i# W( O( u" k2 X5 E6 f
" }5 V  }# N3 I8 }
如何使用basename命令

6 \7 \+ L: E6 p: C
在Centos7系统中,已经默认安装了basename命令了,该命令包含在coreutils安装包里。
微信图片_20210109222452.png

; x, T3 e- g0 j  n* L4 i' @0 Zbasename有两种语法:
basename NAME [SUFFIX]) l/ w9 }# u' n1 ?! c
basename OPTION... NAME...
2 j8 f* v2 j  h( b& L) ?# c' s+ N
<以上代码可复制粘贴,可往左滑>
basename最后一部分。也可以删除任何结尾的后缀。这是一个简单的命令,最基本的是去掉文件名前面的目录并打印出来:
[root@localhost ~]# basename /etc/yum.repos.d/CentOS-Base.repo & O# Q' d5 H% ]! H# N5 W. v5 Z
CentOS-Base.repo$ P' ?& j, `, [0 q* e$ b( D  H. B* t
<以上代码可复制粘贴,可往左滑>
basename命令默认删除所有结尾的/字符:
[root@localhost ~]# basename /usr/local/
! [3 ~' S! ^! K' F" Q' `! qlocal
" w1 `/ D9 q. S) j+ C[root@localhost ~]# basename /usr/local
* r3 A" U! [- M. y" i( e# t& Mlocal
* H2 p" u7 X" Q  p
<以上代码可复制粘贴,可往左滑>
默认情况下,每条输出行以换行符(\n)结尾。要以NUL结尾,请使用-z(--zero)选项。
[root@localhost ~]# basename -z /usr/local
0 P; p) N1 \) _# C7 V3 {" t4 N$ Qlocal[root@localhost ~]#
: Q9 m. ?7 I' u, d! R8 k/ ], V; e
<以上代码可复制粘贴,可往左滑>
微信图片_20210109222456.png
) `* p  H( q5 I5 b

) e! S: t% n2 W% |8 |+ W7 D! V
2 `1 \0 V4 S* [/ \$ e7 d
basename接受多个文件

* H6 b0 U8 H& e1 ]+ M
basename命令可以接受多个名称作为参数。可以使用-a(--multiple)选项,然后使用空格分隔文件列表。例如,要获取/etc/passwd和/etc/shadow的文件名,可以运行:
[root@localhost ~]# basename -a /etc/passwd /etc/shadow$ T! c& H! f9 d% ]  m8 j$ o$ Y3 r
passwd1 [1 p; R. {# p, I5 \! s& e3 q
shadow% v; I4 Q# l' x6 h1 U* u
<以上代码可复制粘贴,可往左滑>
+ Q2 q, @' z% D% _3 u$ D4 m( u
- q2 \: D- y, `1 q5 h

( t8 R$ F2 m. m% A
删除指定结尾的后缀

: R  B4 ^8 b& }$ S
要从文件名中删除任何结尾的后缀,请将后缀作为第二个参数传递:
[root@localhost ~]# basename /etc/hostname name" w0 \/ H7 @: Q8 `8 h9 f( |
host  p3 T0 F4 b. \) Q. A! x$ ~
另一种方法:6 n4 ^. K7 {( x1 m7 z7 p
[root@localhost ~]# basename -s name /etc/hostname
5 W# d6 f( r/ a, T( F' {host) b% n4 M3 \. X8 o) G3 O
<以上代码可复制粘贴,可往左滑>
上面例子中,指定name为后缀,可以看到输出结果中只显示/后面和name前面的内容了。
微信图片_20210109222459.png
: `) \+ i# X3 ?9 D: T; I7 D
通常,此功能用于删除文件的扩展名:
[root@localhost ~]# basename -s .conf  /etc/httpd/conf/httpd.conf" _/ F/ p7 b. E8 V  a1 }
httpd
% r, ~* A/ ^( k& d3 m0 O% Y或者
0 M& e; v: `* N4 q[root@localhost ~]# basename /etc/httpd/conf/httpd.conf .conf3 N- X5 I4 j1 q
httpd. @- e8 |: t) U& x) w4 d2 O
<以上代码可复制粘贴,可往左滑>3 T) s& h0 E* ?; z
微信图片_20210109222502.png
0 @$ y0 c1 t% E% K. P
下面例子,使用-a选项指定多个文件,-s选项指定后缀内容:
[root@localhost ~]# basename -a -s .conf /etc/sysctl.conf /etc/httpd/conf/httpd.conf
4 e, j5 z5 l& |6 h! K% A3 ~1 esysctl9 r+ ]" d- u5 s5 ?: p- U- s6 s
httpd6 F; J7 b/ F" U7 a( N- p" H/ M2 m
<以上代码可复制粘贴,可往左滑>
删除末尾后缀的另一种方法是使用-s(--suffix = SUFFIX)选项指定后缀。上面实例中以展现。

7 B6 j7 u; b! A/ Z
) f. Q6 ^" _0 r) G, c( G2 q
, N- h; B( K& |8 f" v* D
使用实例

+ @% e2 \7 I7 B: M
以下示例显示了如何在bash脚本中使用for循环、mv命令和basename命令,通过将当前目录下面的图片文件,文件扩展名从“ .jpg”替换为“ .jpeg”:
[root@localhost test]# vim convert.sh
( B# _% Z( g2 o" `9 f( x. s$ J! O+ S) N9 c
#!/bin/bash! d; d' ^$ x& F: f& Z, C
for file in *.jpg, }; n% u# B: I: q; l
do
$ Z* O: c. j+ z  mv "$file" "$(basename $file .jpg).jpeg"
+ W( ~/ i9 [* P, mdone
<以上代码可复制粘贴,可往左滑>
微信图片_20210109222505.png
微信图片_20210109222509.png

  D, t: }6 X. f7 f4 M) R

, o7 Y1 Z/ P7 j0 V! F3 O* p6 }- q$ T1 A
总    结

; i  X- ~: i% j
basename命令的介绍到此为止,希望对你有帮助!

' ]7 y3 P( `' z) k4 Y# J
赞 收藏 评论0 发布时间:2021-1-9 22:26

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版