200字
dirname / basename
2025-10-12
2025-10-16

dirname 命令

"directory name" 的缩写,是从文件路径中提取目录部分的命令行工具。

该命令可剥离路径中的文件名,仅保留其所在的目录路径,常用于脚本中处理文件路径的目录定位。

 dirname [选项] <路径1> <路径2> ...

参考示例

  1. 提取普通文件的目录路径

    执行命令:dirname /var/log/nginx/error.log

    输出结果:/var/log/nginx

    说明:从完整路径中剥离 error.log 文件名,保留其所在目录。

  2. 处理末尾带斜杠(trailing slash)的路径

    执行命令:dirname /var/log/nginx/

    输出结果:/var/log

    说明:路径末尾的斜杠会被忽略,自动识别上一级目录。

  3. 处理相对路径

    执行命令:dirname ./config/app.ini

    输出结果:./config

    说明:即使是相对路径,也能正确提取目标文件所在的目录。

  4. 同时处理多个路径

    执行命令:dirname /etc/hosts /tmp/test.txt

    输出结果:

     /etc
     /tmp

    说明:依次处理多个路径参数,分别返回每个路径的目录部分。

  5. 在脚本中获取配置文件目录

    脚本代码:

     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.logtest.txt

参考示例

  1. 提取普通文件的文件名

    执行命令:basename /var/log/nginx/access.log

    输出结果:access.log

    说明:从完整路径中剥离目录部分,仅保留文件名。

  2. 移除文件名的指定后缀

    执行命令1:basename /var/log/nginx/error.log .log

    执行命令2:basename -s log /var/log/nginx/error.log

    输出结果(两者一致):error

    说明:两种方式均可移除文件名后的 .log 后缀,适用于生成无后缀的标识。

  3. 处理末尾带斜杠的路径

    执行命令:basename /var/log/nginx/

    输出结果:nginx

    说明:路径末尾的斜杠会被忽略,此时将最后一级目录名当作“文件名”提取。

  4. 在日志脚本中生成备份文件名

    脚本代码:

     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

    说明:常用于日志切割脚本,生成带日期的备份文件名。

  5. 提取脚本自身的文件名

    脚本代码:

     script_name=$(basename "$0")  # $0 表示脚本自身路径
     echo "当前脚本名:$script_name"

    若脚本路径为 /usr/local/bin/cleanup.sh,输出结果:当前脚本名:cleanup.sh

    说明:适用于脚本内部的自我标识(如日志输出、错误提示)。


评论