当前位置:首页>Linux>Linux基础 | basename & dirname 使用指南:路径处理的必备工具

Linux基础 | basename & dirname 使用指南:路径处理的必备工具

  • 2026-09-17 10:35:22
Linux基础 | basename & dirname 使用指南:路径处理的必备工具
在 Linux 中处理文件路径时,经常会遇到这样的需求:
  • 从路径中提取文件名
  • 获取文件所在目录
  • 在脚本中处理路径变量
  • 拼接或拆分文件路径
例如有这样一个路径:
/home/user/scripts/test.sh
你可能想要得到:test.sh
或者:/home/user/scripts
如果用字符串处理会很麻烦,但 Linux 提供了专门的工具:
👉basename 和 dirname
一句话理解:

basename 用于获取文件名,dirname 用于获取目录路径

一、basename 命令详解

1️⃣ 基本用法

basename 路径
示例:
basename /home/user/test.sh
输出:
test.sh
👉 直接提取“文件名部分”

2️⃣ 去掉后缀

basename 还可以去掉文件后缀:
basename 文件名 后缀
示例:
basename test.sh .sh
输出:
test
👉 自动去掉 .sh

3️⃣ 结合变量使用(脚本常用)

file="/home/user/demo.log"basename $file
输出:
demo.log
👉 非常适合在 Shell 脚本中使用

二、dirname 命令详解

1️⃣ 基本用法

dirname 路径
示例:
dirname /home/user/test.sh
输出:
/home/user
👉 获取“目录部分”

2️⃣ 当前目录特殊情况

dirname test.sh
输出:
.
说明:
👉 当前目录

三、basename + dirname 组合使用

这两个命令经常配合使用。
示例:
path="/home/user/test.sh"echo "文件名: $(basename $path)"echo "目录: $(dirname $path)"
输出:
文件名: test.sh
目录: /home/user

四、实战:脚本获取自身路径

这是一个非常经典的用法 👇
#!/bin/bashscript_path=$(realpath $0)script_dir=$(dirname $script_path)echo "脚本路径: $script_path"echo "所在目录: $script_dir"
输出:
脚本路径: /home/user/script.sh
所在目录: /home/user
👉 在部署脚本、读取配置时非常有用

五、批量处理文件名

例如提取目录中所有文件名:
for f in /var/log/*.log; do    basename $fdone
输出:
syslog.log
error.log
access.log
👉 用于批量处理日志文件

六、常见错误示例

❌ 错误理解路径:
basename /home/user/
输出:
user
👉 注意:最后的 / 可能影响结果

七、与 cut/awk 的对比

很多人会用:
echo "/home/user/test.sh" | cut -d '/' -f4
但这种方式:
❌ 不通用
❌ 不安全
❌ 不适配不同路径结构
👉 推荐使用:
basenamedirname

八、实际应用场景

这两个命令在实际工作中非常常见:
✔ Shell 脚本路径处理
✔ 日志文件分析
✔ 自动化部署脚本
✔ 提取文件名做批处理
✔ 动态构建路径

九、常用命令总结

basename /path/file.txtdirname /path/file.txtbasename file.txt .txt
组合用法:
$(basename $file)$(dirname $file)

十、小结

basename 和 dirname 是 Linux 中非常基础但重要的工具。
它们解决的是:路径拆分问题
一句话总结:basename 取文件名,dirname 取目录名。
📌 最后给你一个脚本常用口诀:

路径拆分不用愁

basename 取文件

dirname 取目录

最新文章

随机文章