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 $'' f; do mv "$f" "${f%.txt}"; done
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…