在 Bash 脚本中使用 basename 命令
在 Bash Scripts 中使用 basename Command
在 Bash scripting 中,最常见的任务之一是处理 file paths——尤其是当你想从完整路径中只提取 file name 时。这就是 basename command 的用武之地。虽然看起来很简单,但 basename 在更复杂的 scripts、automation tools、hosting services 和 CI/CD environments 中正确使用时有着强大的用途。
什么是 basename?
basename command 会去除 directory path,并可选择性地移除 file extension,只保留 base name(file path 的最后组成部分)。
🔧 Basic Syntax:
basename [path] [suffix]✅ Simple Examples:
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
为什么在 Scripts 中使用 basename?
以下只是一些真实场景中 scripting 需求的例子:
Logging:提取正在处理的 log file 名称。
Archiving:只将 filename 追加到压缩归档中。
Automation:批量处理 files 并生成 output filenames。
Pipelines:在 CI/CD steps 中提取 file names。
Bash Scripts 中的 Practical Use Cases
📁 1. Looping Over Files with Logging
这个 script 会遍历 .log files,提取不带 extension 的名称,并记录每个操作。basename 让 filename 处理更简单,无需复杂的字符串切片。
📂 2. Using basename for Dynamic File Paths
假设你从用户输入或另一个 process 接收到完整路径:
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"
在 script 中使用 basename 可确保在处理 dynamic file paths 时具有灵活性,尤其是在像 Linux VPS 这样的环境中,logs、config files 和 backups 可能位于不同目录。这使你的 script 无论传入的是像 /var/log/syslog 这样的完整路径,还是像 ./config.txt 这样的相对 file,都能保持稳健。
🧪 3. Combining basename with dirname
将它们一起使用以分离 path elements:
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"使用 basename 移除 File Extensions
如果你想移除已知的 extensions:
⚠️ 注意:这只有在 suffix matches exactly 时才有效。所以 .txt 可以,但 .TXT 或 .tar.gz 不行,除非明确指定。
对于多个 extensions,可将 basename 与其他工具结合:
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archive或者:





