Você pode usar a opção find
de exec
para (recursivamente) fazer um loop sobre todos os arquivos e, em seguida, usar substituições simples de string:
find . -type f -name "product-103*" \
-exec sh -c 'echo mv "$0" "${0/103/104}"' '{}' \;
Remova o echo
quando tiver certeza de que isso é o que você deseja.
Basicamente, o que exec
faz é substituir o nome de cada arquivo encontrado em {}
, que é passado como um argumento para sh -c
. Este argumento está disponível como $0
, portanto, o nome do arquivo. Usamos esse argumento $0
em uma chamada mv
, em que o segundo argumento é o novo nome de arquivo. Aqui, 103 é substituído por 104. Observe que são necessárias aspas duplas para manipular corretamente os espaços em branco nos nomes dos arquivos.
Consulte Manipulação de strings no Guia de scripts do Bash.
Com zmv
do zsh (no OS X até /bin/zsh
):
autoload -U zmv
zmv -Wn '*103*' '*104*'
Remova a opção -n
quando isso acontecer.