Linux: remove file extensions for multiple files

rename is slightly dangerous, since according to its manual page:

rename will rename the specified files by replacing the first occurrence of…

It will happily do the wrong thing with filenames like c.txt.parser.y.

Here’s a solution using find and bash:

find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done

Keep in mind that this will break if a filename contains a newline (rare, but not impossible).

If you have GNU find, this is a more solid solution:

find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done

Leave a Comment