Uau, isso foi mais complicado do que eu esperava.
Como Gilles apontou , considerando o número de arquivos a serem manipulados, você deve renomeá-los de uma forma isso não lhe dará problemas se o comando for interrompido. O comando abaixo faz isso.
Eu escrevi este comando para ser bastante robusto contra falhas. Observe que explicitamente excluímos arquivos em que o número tem um 0 à esquerda; se você tiver arquivos como esse, poste um comentário e incluirei um comando para lidar com eles.
find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9]' -exec sh -c 'for f; do mv -i "$f" "${f%_*}_$((${f##*_}-1)).decremented"; done' find-sh-decrement {} + && find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9].decremented' -exec sh -c 'for f; do mv -i "$f" "${f%.decremented}"; done' find-sh-remove-prefix {} +
Com invólucros de linha (ainda podem ser copiados e colados):
find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9]' \
-exec sh -c 'for f;
do mv -i "$f" "${f%_*}_$((${f##*_}-1)).decremented";
done' find-sh-decrement {} + &&
find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9].decremented' \
-exec sh -c 'for f;
do mv -i "$f" "${f%.decremented}";
done' find-sh-remove-prefix {} +
Explicação das partes (isso pode usar alguma limpeza de formatação):
##### Recursively find regular files in the current directory...
find . -type f
##### whose name matches this exact pattern...
-name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9]'
##### and run the following shell script...
-exec sh -c
##### (shell script: ) for every file given as an argument...
'for f;
##### rename the file, prompting for confirmation for any overwrites...
do mv -i
##### from the original file name...
"$f"
##### to the file name decremented by 1, with '.decremented' afterward...
"${f%_*}_$((${f##*_}-1)).decremented";
##### (End of shell script)
done'
##### on as many found files as possible at once,
##### using the name "find-sh-decrement" for error reporting.
find-sh-decrement {} +
##### If that completes successfully...
&&
##### Pass through again and remove the ".decremented" prefix.
find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9].decremented' -exec sh -c 'for f; do mv -i "$f" "${f%.decremented}"; done' find-sh-remove-prefix {} +
Resultados do teste:
$ ls
DBGC180_805754 DBGC180_805755 DBGC180_805756
$ cat DBGC180_805754
This file started as DBGC180_805754
$ cat DBGC180_805755
This file started as DBGC180_805755
$ cat DBGC180_805756
This file started as DBGC180_805756
$ find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9]' -exec sh -c 'for f; do mv -i "$f" "${f%_*}_$((${f##*_}-1)).decremented"; done' find-sh-decrement {} + && find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9].decremented' -exec sh -c 'for f; do mv -i "$f" "${f%.decremented}"; done' find-sh-remove-prefix {} +
$ ls
DBGC180_805753 DBGC180_805754 DBGC180_805755
$ cat DBGC180_805753
This file started as DBGC180_805754
$ cat DBGC180_805754
This file started as DBGC180_805755
$ cat DBGC180_805755
This file started as DBGC180_805756
$
Para maior segurança, execute o primeiro comando find
e inspecione os resultados antes de executar o segundo comando para remover o sufixo .decremented
.
Execute isto:
find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9]' \
-exec sh -c 'for f;
do mv -i "$f" "${f%_*}_$((${f##*_}-1)).decremented";
done' find-sh-decrement {} +
Em seguida, inspecione os resultados e, em seguida, execute:
find . -type f -name 'DBGC180_[1-9][0-9][0-9][0-9][0-9][0-9].decremented' \
-exec sh -c 'for f;
do mv -i "$f" "${f%.decremented}";
done' find-sh-remove-prefix {} +