Harness the Combinatoric Power of Command-Line Tools and Utilities
Rename Multiple Files
Published May 14, 2024
Warning
❗ This article is more than six months old. Some things may not work as written.
You can rename a file using the mv
command:
mv file.txt newname.txt
If you need to mass-rename files, you can do so with a for
loop in Bash.
For example, to rename all files in the current directory with the .txt
extension to have the .md
extension instead, execute the following command:
for file in ./*.txt; do mv -v "${file}" "${file%.*}.md"; done
Within the mv
command, you use some variables and shell substitution:
${file}
is the variable that refers to the current file name. Thefile
variable is declared in thefor
loop.%
indicates that you want to remove a suffix pattern from the end of the variable’s value..*
is the pattern that matches the dot (.
) followed by any characters (*
), which represents the file extension in this case.${file%.*}
removes the.txt
extension from the file name."${file%.*}.md"
removes the .txt extension and appends.md
, creating the resulting file name.
Using the mv
command with the -v
flag gives you a detailed output.
Running the command gives the following output:
renamed './chapter1.txt' -> './chapter1.md'
renamed './chapter2.txt' -> './chapter2.md'
renamed './chapter3.txt' -> './chapter3.md'
renamed './chapter4.txt' -> './chapter4.md'