dirname 命令
"directory name" 的缩写,是从文件路径中提取目录部分的命令行工具。
该命令可剥离路径中的文件名,仅保留其所在的目录路径,常用于脚本中处理文件路径的目录定位。
dirname [选项] <路径1> <路径2> ...参考示例
提取普通文件的目录路径
执行命令:
dirname /var/log/nginx/error.log输出结果:
/var/log/nginx说明:从完整路径中剥离
error.log文件名,保留其所在目录。处理末尾带斜杠(trailing slash)的路径
执行命令:
dirname /var/log/nginx/输出结果:
/var/log说明:路径末尾的斜杠会被忽略,自动识别上一级目录。
处理相对路径
执行命令:
dirname ./config/app.ini输出结果:
./config说明:即使是相对路径,也能正确提取目标文件所在的目录。
同时处理多个路径
执行命令:
dirname /etc/hosts /tmp/test.txt输出结果:
/etc /tmp说明:依次处理多个路径参数,分别返回每个路径的目录部分。
在脚本中获取配置文件目录
脚本代码:
config_path="/etc/nginx/nginx.conf" config_dir=$(dirname "$config_path") # 提取目录路径 echo "配置文件目录:$config_dir"输出结果:
配置文件目录:/etc/nginx说明:常用于脚本中基于目录路径执行后续操作(如查找同目录下的依赖文件)。
basename 命令
从文件路径中提取基础文件名(不含目录部分)的命令行工具。
该命令可剥离路径中的目录部分,仅保留文件名,还支持移除文件名的指定后缀,常用于生成标识或备份文件名。
basename [选项] <路径1> <路径2> ... [后缀]常用选项
-s <后缀>:"suffix",移除文件名中的指定后缀(无需写前缀点)。示例:
basename -s log /var/log/nginx/error.log,输出error.(移除.log后缀)。-a:"all",同时处理多个路径参数,依次输出每个路径的文件名。示例:
basename -a /var/log/error.log /tmp/test.txt,输出error.log和test.txt。
参考示例
提取普通文件的文件名
执行命令:
basename /var/log/nginx/access.log输出结果:
access.log说明:从完整路径中剥离目录部分,仅保留文件名。
移除文件名的指定后缀
执行命令1:
basename /var/log/nginx/error.log .log执行命令2:
basename -s log /var/log/nginx/error.log输出结果(两者一致):
error说明:两种方式均可移除文件名后的
.log后缀,适用于生成无后缀的标识。处理末尾带斜杠的路径
执行命令:
basename /var/log/nginx/输出结果:
nginx说明:路径末尾的斜杠会被忽略,此时将最后一级目录名当作“文件名”提取。
在日志脚本中生成备份文件名
脚本代码:
log_path="/var/log/nginx/access.log" log_name=$(basename "$log_path") # 提取文件名 access.log backup_name="${log_name}-$(date +%Y%m%d)" # 拼接日期 echo "备份文件名:$backup_name"输出结果:
备份文件名:access.log-20251012说明:常用于日志切割脚本,生成带日期的备份文件名。
提取脚本自身的文件名
脚本代码:
script_name=$(basename "$0") # $0 表示脚本自身路径 echo "当前脚本名:$script_name"若脚本路径为
/usr/local/bin/cleanup.sh,输出结果:当前脚本名:cleanup.sh说明:适用于脚本内部的自我标识(如日志输出、错误提示)。