#!/bin/sh
find . -depth -name "*.$1" -exec sh -c '
from=$1
to=$2
shift 2
for pathname do
mv "$pathname" "${pathname%.$from}.$to"
done' sh "$1" "$2" {} +
Isso permite que o script interno tome os sufixos de nome de arquivo como parâmetros, bem como uma lista de nomes de caminho a serem alterados. No script interno, você extrai os dois sufixos e os desloca para fora da lista de argumentos, em seguida executa um loop sobre os nomes de marcas fornecidos ao script em find
.
Menos eficiente (uma invocação de sh -c
por nome de caminho em vez de percorrer um lote deles):
#!/bin/sh
find . -depth -name "*.$1" -exec sh -c 'mv "$3" "${3%.$1}.$2"' sh "$1" "$2" {} ';'
Como observação: crie o hábito de usar sh
ou find-sh
ou algum outro nome relevante para o argumento zeroth no script interno. Esse argumento é usado em mensagens de erro do script e a mensagem de erro proveniente de _
pode ser confusa em algumas circunstâncias.