Я хочу рекурсивно перебирать каталог и изменять расширение всех файлов определенного расширения, например .t1
до .t2
. Что такое команда bash для этого?
Рекурсивно изменить расширения файлов в Bash
Ответ 1
Если вы получили переименование, используйте:
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' \;
Если переименование недоступно, используйте:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' \;
Ответ 2
Если ваша версия bash
поддерживает параметр globstar
(версия 4 или новее):
shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done
Ответ 3
или вы можете просто установить команду mmv
и выполните следующие действия:
mmv *.t1 '#1.t2'
или в чистом виде bash, простой способ:
for f in *.t1; do
mv "$f" "${i%.t1}.t2"
done
(т.е.: for
может отображать файлы без помощи внешней команды, например ls
или find
)
НТН
Ответ 4
Я бы сделал это в bash:
for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done
ИЗМЕНИТЬ: моя ошибка: она не рекурсивна, вот мой способ для рекурсивного смены имени файла:
for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done