basename 与 dirname:拆分路径中的文件名和目录
在 Linux shell 脚本中用 basename(可去后缀)和 dirname 拆解文件路径。
basename 路径 [后缀] 取最后的文件名并可去掉后缀,dirname 路径 取所在目录。
01命令
命令
$ basename /var/log/syslog .log && dirname /etc/nginx/sites/default.conf02作用说明
这两个小工具是脚本里拆分路径的可移植方案:basename 去掉最后一个斜杠前的所有内容(还能去掉结尾的 .log 之类后缀),dirname 去掉最后一个路径分量。${var%/*} 和 ${var##*/} 的参数展开写法不用额外进程,但 basename/dirname 能正确处理不带斜杠等边界情况,且在任何 POSIX 系统上都可用。
03风险
!注意: basename 只在后缀完全匹配时才去除,并不会校验扩展名是否真实存在。
04撤销
✓无需撤销——该命令不会改变持久状态。
05来源
- dirname(1P) — POSIX manual page依据: dirname returns the string left after deleting the last component and trailing slashes
- basename(1P) — POSIX manual page依据: basename returns the non-directory portion of a pathname; an optional suffix is removed
最后验证: 2026-09-17 · 分类: 文件与文件夹