Linux Shell脚本中basename和dirname的详细用法教程
在Linux Shell脚本中,basename
和 dirname
是两个非常实用的命令,常用于处理文件路径和名称。本文将详细介绍这两个命令的用法,并提供丰富的示例代码,以帮助您更好地理解和应用它们。
一、basename命令
1.1 基本用法
basename
命令用于去除路径信息,只保留文件名或目录名。其基本语法如下:
basename [OPTION] NAME [SUFFIX]
NAME
:要处理的路径名。SUFFIX
:可选,用于去除文件名中的后缀。
1.2 示例
1.2.1 去除路径信息
#!/bin/bash
file_path="/usr/local/bin/script.sh"
file_name=$(basename "$file_path")
echo "File name: $file_name"
输出:
File name: script.sh
1.2.2 去除后缀
#!/bin/bash
file_path="/usr/local/bin/script.sh"
file_name=$(basename "$file_path" .sh)
echo "File name without suffix: $file_name"
输出:
File name without suffix: script
1.2.3 批量处理文件名
#!/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
命令用于去除文件名,只保留路径信息。其基本语法如下:
dirname NAME
NAME
:要处理的路径名。
2.2 示例
2.2.1 获取路径信息
#!/bin/bash
file_path="/usr/local/bin/script.sh"
dir_path=$(dirname "$file_path")
echo "Directory path: $dir_path"
输出:
Directory path: /usr/local/bin
2.2.2 结合basename使用
#!/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"
输出:
Directory path: /usr/local/bin
File name: script.sh
2.2.3 批量处理文件路径
#!/bin/bash
for file in /usr/local/bin/*.sh; do
dir_path=$(dirname "$file")
echo "Directory path: $dir_path"
done
三、实践应用
3.1 文件备份脚本
一个简单的文件备份脚本,使用 basename
和 dirname
处理文件名和路径。
#!/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
处理文件路径和名称。
#!/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脚本编写的效率和灵活性。