当前位置:首页>Linux>Linux basename 实战技巧:一行命令快速提取文件名,运维必备神器

Linux basename 实战技巧:一行命令快速提取文件名,运维必备神器

  • 2026-10-11 07:09:55
Linux basename 实战技巧:一行命令快速提取文件名,运维必备神器

日常排查日志、批量处理文件、脚本自动化时,我们经常会遇到完整文件路径:/opt/logs/2026/access.log、/data/upload/demo.pdf。如果手动切割路径提取文件名比较麻烦,用sed/awk写复杂正则容易出错,linux自带 basename命令就是专门用来剥离路径、只输出文件名的原生工具,简单高效,适配日志解析、批量脚本、日志清洗等各类运维场景。

一、basename基础语法

1、baseame的基础格式

basename [完整路径] [后缀名]

basename的主要作用:

1.自动剔除前置目录,只输出文件名称 ;

2.支持直接删除文件后缀,只保留主文件名。

2、basename的基本用法
#只提取文件名basename /var/log/nginx/access.log#提取文件名并删除后缀.log basename /var/log/nginx/access.log .log#仅传入文件名(无路径),原样输出basename txtbak20251221.tar.gz
二、basename的实战用法
场景 1:日志批量提取文件名
这个是我们日常使用最多的命令:
1、批量提取文件名含后缀
#用awk+basename提取批量提取文件名 #读取日志最后一列路径,循环提取文件名awk '{print $4}' log.txt | while read filepath; do basename "$filepath"; done
2、只提取文件名不含后缀
#只提取文件名,不需要后缀awk '{print $4}' log.txt | while read f; do basename $f .${f##*.}; done
3.实时提取文件
排查线上实时上传日志,一边输出日志一边提取文件:
tail -f log.txt | awk '{print $4}' | xargs -I {} basename {}#以文件目录在第四列为例 
场景 2:批量遍历目录,获取所有文件名称
1. 普通目录遍历
#循环打印目录下所有文件名for file in /data/*; do basename "$file"; done

2. 递归遍历多层目录

find输出完整路径,配合basename只拿文件名:

#递归查找所有.log文件,输出纯文件名find /data -name "*.log" | xargs -I {} basename {}

场景 3:使用脚本批量重命名文件

#!/bin/bashpath="/data/ceshi"for file in "$path"/*.pdfdo    [ -f "$file" ] || continue    name=$(basename "$file" .pdf)    mv -- "$file" "$path/${name}.txt"done
将/data/ceshi目录下pdf文件去掉后缀重名为txt。
场景 4:处理带空格、特殊字符的文件路径
我们运维时,日志或文件路径包含空格是最经常遇到的问题,普通命令会分割失效,basename搭配双引号能完美实现。
#提取双引号内路径,引号包裹避免空格截断awk -F'"' '{print $2}' log.txt | while read f; do basename "$f"; done#双引号\"做分隔符,路径是第二列即$2 
场景 5:批量去除统一后缀名
basename还可以批量处理同类文件的后缀。
#单个文件,仅输出没有后缀的文件,不会修改原文件 basename 123.jpg .jpg#批量处理日志文件,只保留文件名 find /data/ceshi/ -type f -name "*.log" | while read -r f; do basename "$f" .log; done
三、避坑指南:
  • 路径包含空格不加双引号
错误写法:basename /data/my file.pdf
正确写法:basename "/data/my file.pdf" 
  • 后缀匹配区分大小写
basename demo.JPG .jpg 无法删除后缀,大小写必须完全一致 ;
目录路径纯目录路径:basename /opt/logs,会输出logs,仅获取目录名,不是文件 。
  • 管道xargs无引号导致空格截断
批量处理文件时,xargs basename {} 遇到空格文件失效,推荐 while read 循环并加双引号。
四、总结
basename是运维容易忽略但实用性极强的系统命令,相比sed、awk正则切割路径,拥有零正则、兼容特殊路径、适配脚本自动化三大优势。如果你觉得文章对你的运维工作有帮助,记得点赞加关注。后附几个常用命令:
1.日志提取所有文件,去重排序,具体路径在那列以实际为准awk '{print $4}' app.log | while read -r f; do basename "$f"; done | sort -u > file_list.txt2.统计日志内每个文件出现次数,路径在最后一列awk '{print $4}' app.log | while read -r f; do basename "$f"; done | sort | uniq -c3.递归查找指定后缀文件,输出纯文件名find /data/upload -type f -name "*.pdf" | while read -r f; do basename "$f"; done
#运维#linux运维#linux实战#提取文件名#basename

最新文章

随机文章