Skip to content

Getting file names from paths with Bash script

homepage-banner

Introduction

In Bash, we often deal with file paths, and sometimes we need to extract only the file name from the path. This can be useful when we want to perform operations on the file or when we want to display only the file name in the output. In this blog post, we will explore different ways to extract file names from paths in Bash.

Using the basename command

One of the easiest ways to get the file name from a path is to use the basename command. The basename command takes a path as an argument and returns only the file name without the path. Here is an example:

path="/home/user/documents/file.txt"
filename=$(basename "$path")
echo "$filename"

This will output file.txt, which is the file name extracted from the path.

Using parameter expansion

Another way to extract the file name from a path is to use parameter expansion. This is a Bash feature that allows you to manipulate variables. In this case, we can manipulate the path variable to extract only the file name. Here is an example:

path="/home/user/documents/file.txt"
filename="${path##*/}"
echo "$filename"

This will also output file.txt.

Using regular expressions

If you need more control over the file name extraction process, you can use regular expressions. Regular expressions are a powerful tool for pattern matching and can be used to extract specific parts of a string. Here is an example:

path="/home/user/documents/file.txt"
if [[ "$path" =~ /([^/]+)$ ]]; then
  filename=${BASH_REMATCH[1]}
  echo "$filename"
fi

This will output file.txt as well.

Conclusion

Extracting file names from paths is a common task when working with Bash scripts. In this blog post, we explored three different methods for achieving this: using the basename command, parameter expansion, and regular expressions. Each method has its own advantages and disadvantages, so choose the one that works best for your specific use case.

Leave a message