С Расширением параметра и mv
for f in *.docx.txt; do
echo mv -vn "$f" "${f%%.*}.${f##*.}"
done
Однострочным
for f in *.docx.txt; do echo mv -vn "$f" "${f%%.*}.${f##*.}"; done
Удалите echo
, если вы считаете, что вывод правильный , чтобы переименовать файлы.
Должно работать в любой POSIX
совместимой оболочке, без каких-либо скриптов.
С bash включите опцию nullglob
оболочки, чтобы глобус *.docx.txt
не будет расширяться как буквальный *.docx.txt
, если нет файлов, оканчивающихся на .docx.txt
#!/usr/bin/env bash
shopt -s nullglob
for f in *.docx.txt; do
echo mv -vn "$f" "${f%%.*}.${f##*.}"
done
ОБНОВЛЕНИЕ: благодаря @Léa Gris
добавить nullglob
измените глобус на *.docx.txt
и добавьте -n
к mv
, хотя -n
и -v
не определены POSIX
согласно https://pubs.opengroup.org/onlinepubs/9699919799/utilities/mv.html Это должно быть как в GNU, так и в BSD mv