Loading... # Linux Shell脚本中basename和dirname的详细用法教程 在Linux Shell脚本中,`basename`和 `dirname`是两个非常实用的命令,常用于处理文件路径和名称。本文将详细介绍这两个命令的用法,并提供丰富的示例代码,以帮助您更好地理解和应用它们。 ## 一、basename命令 ### 1.1 基本用法 `basename`命令用于去除路径信息,只保留文件名或目录名。其基本语法如下: ```sh basename [OPTION] NAME [SUFFIX] ``` - `NAME`:要处理的路径名。 - `SUFFIX`:可选,用于去除文件名中的后缀。 ### 1.2 示例 #### 1.2.1 去除路径信息 ```sh #!/bin/bash file_path="/usr/local/bin/script.sh" file_name=$(basename "$file_path") echo "File name: $file_name" ``` 输出: ```sh File name: script.sh ``` #### 1.2.2 去除后缀 ```sh #!/bin/bash file_path="/usr/local/bin/script.sh" file_name=$(basename "$file_path" .sh) echo "File name without suffix: $file_name" ``` 输出: ```sh File name without suffix: script ``` #### 1.2.3 批量处理文件名 ```sh #!/bin/bash for file in /usr/local/bin/*.sh; do base_name=$(basename "$file" .sh) echo "Base name: $base_name" done ``` ## 二、dirname命令 ### 2.1 基本用法 `dirname`命令用于去除文件名,只保留路径信息。其基本语法如下: ```sh dirname NAME ``` - `NAME`:要处理的路径名。 ### 2.2 示例 #### 2.2.1 获取路径信息 ```sh #!/bin/bash file_path="/usr/local/bin/script.sh" dir_path=$(dirname "$file_path") echo "Directory path: $dir_path" ``` 输出: ```sh Directory path: /usr/local/bin ``` #### 2.2.2 结合basename使用 ```sh #!/bin/bash file_path="/usr/local/bin/script.sh" dir_path=$(dirname "$file_path") base_name=$(basename "$file_path") echo "Directory path: $dir_path" echo "File name: $base_name" ``` 输出: ```sh Directory path: /usr/local/bin File name: script.sh ``` #### 2.2.3 批量处理文件路径 ```sh #!/bin/bash for file in /usr/local/bin/*.sh; do dir_path=$(dirname "$file") echo "Directory path: $dir_path" done ``` ## 三、实践应用 ### 3.1 文件备份脚本 一个简单的文件备份脚本,使用 `basename`和 `dirname`处理文件名和路径。 ```sh #!/bin/bash src_file="/usr/local/bin/script.sh" backup_dir="/backup" # 获取文件名和目录路径 file_name=$(basename "$src_file") dir_path=$(dirname "$src_file") # 创建备份目录结构 mkdir -p "$backup_dir/$dir_path" # 复制文件到备份目录 cp "$src_file" "$backup_dir/$dir_path/$file_name" echo "File $src_file has been backed up to $backup_dir/$dir_path/$file_name" ``` ### 3.2 日志文件分离 一个将日志文件按日期分离的脚本,使用 `basename`和 `dirname`处理文件路径和名称。 ```sh #!/bin/bash log_file="/var/log/app.log" archive_dir="/var/log/archive" # 获取当前日期 current_date=$(date +%Y-%m-%d) # 获取文件名和目录路径 file_name=$(basename "$log_file") dir_path=$(dirname "$log_file") # 创建归档目录 mkdir -p "$archive_dir/$current_date" # 复制并重命名日志文件 cp "$log_file" "$archive_dir/$current_date/${file_name}_$current_date" echo "Log file $log_file has been archived to $archive_dir/$current_date/${file_name}_$current_date" ``` ## 四、总结 本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。 最后修改:2024 年 08 月 01 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏