在 Bash 脚本中使用 basename 命令

热门:
提升您的服务器设置! 申请 AVA 并使用 立减 15%
使用优惠码:

在 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:

✅ Simple Examples:

为什么在 Scripts 中使用 basename

以下只是一些真实场景中 scripting 需求的例子:

 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 接收到完整路径:

在 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:

 使用 basename 移除 File Extensions

如果你想移除已知的 extensions:

⚠️ 注意:这只有在 suffix matches exactly 时才有效。所以 .txt 可以,但 .TXT 或 .tar.gz 不行,除非明确指定。

对于多个 extensions,可将 basename 与其他工具结合:

或者:

basename vs Parameter Expansion

虽然 basename 很直观,但它会 spawn a subprocess。对于性能关键的 scripts 或大型循环,建议使用 pure Bash 替代方案:

Bash Native Equivalent:

使用 native Bash 移除 extension: