Using the basename Command in Bash Scripts

Popular:
LEVEL UP YOUR SERVER SETUP! APPLY AVA AND LAUNCH WITH A 15% DISCOUNT
USE PROMO:

Using the basename Command in Bash Scripts

In Bash scripting, one of the most common tasks is manipulating file paths—especially when you want to extract just the file name from a full path. That’s where the basename command comes in. While seemingly simple, basename has powerful use cases when used correctly in more complex scripts, automation tools, hosting services, and CI/CD environments.

What Is basename?

The basename command strips the directory path and optionally removes a file extension, leaving only the base name (the final component of a file path).

🔧 Basic Syntax:

✅ Simple Examples:

Why Use basename in Scripts?

Here are just a few examples of real-world scripting needs:

 Practical Use Cases in Bash Scripts

📁 1. Looping Over Files with Logging

This script loops over .log files, extracts the name without extension, and logs each action. basename simplifies filename handling without complex string slicing.

📂 2. Using basename for Dynamic File Paths

Let’s say you’re receiving full paths from user input or another process:

Using basename in your script ensures flexibility when working with dynamic file paths, especially in environments like a Linux VPS where logs, config files, and backups may reside in different directories. This makes your script robust regardless of whether it’s passed a full path like /var/log/syslog or a relative file like ./config.txt.

🧪 3. Combining basename with dirname

Use them together to isolate path elements:

 Removing File Extensions with basename

If you want to remove known extensions:

⚠️ Note: This only works if the suffix matches exactly. So .txt works, but .TXT or .tar.gz won’t unless explicitly specified.

For multiple extensions, combine basename with other tools:

Or:

basename vs Parameter Expansion

While basename is intuitive, it spawns a subprocess. For performance-critical scripts or large loops, prefer pure Bash alternatives:

Bash Native Equivalent:

Remove extension with native Bash: