dirname 是 Linux 系统中一个非常实用的路径处理命令,主要用于从给定的文件路径中提取目录部分。该命令属于 GNU coreutils 工具集,通常预装在大多数 Linux 发行版中。
基本语法
dirname [选项] 文件名...
功能详解
-
路径提取 :当输入一个完整文件路径时,
dirname会返回该文件所在的目录路径。例如:$ dirname /home/user/docs/report.txt /home/user/docs -
多参数处理:可以同时处理多个路径参数,每个结果单独输出一行:
$ dirname /a/b/c /d/e/f /a/b /d/e -
特殊路径处理:
- 对于当前目录文件(如
./file),返回. - 对于根目录文件(如
/file),返回/ - 对于不带路径的文件名(如
file),返回.
- 对于当前目录文件(如
常用选项
--zero:用 NULL 字符代替换行符分隔结果,这在脚本处理时很有用--help:显示帮助信息--version:显示版本信息
实际应用示例
-
在脚本中获取脚本所在目录:
bash#!/bin/bash SCRIPT_DIR=$(dirname "$0") echo "脚本位于:$SCRIPT_DIR" -
批量处理日志文件路径:
bashfor log in /var/log/app/*.log; do log_dir=$(dirname "$log") echo "处理日志目录:$log_dir" done -
与 basename 命令配合使用:
bashfullpath="/usr/local/bin/app" dir=$(dirname "$fullpath") # 得到 /usr/local/bin base=$(basename "$fullpath") # 得到 app
注意事项
- 该命令不会检查路径是否存在,只是进行字符串处理
- 对于符号链接,需要先使用
readlink -f获取真实路径 - 在路径末尾的
/会被忽略(如/usr/local/会返回/usr)
dirname 在处理文件路径相关的 shell 脚本中非常有用,特别是需要动态获取目录位置时。它与 basename 命令一起构成了 Linux 路径处理的基础工具集。