Подтвердить что ты не робот

Рекурсивно изменить расширения файлов в Bash

Я хочу рекурсивно перебирать каталог и изменять расширение всех файлов определенного расширения, например .t1 до .t2. Что такое команда bash для этого?

4b9b3361

Ответ 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