Esta é uma tarefa mais adequada para expressões regulares. Aqui eu uso expressões regulares com awk
(já que não estou familiarizado com o comando rename
e perl regex, sim - é uma vergonha para mim). A idéia básica é que pegamos o nome do arquivo, nos livramos de todos os números (assumindo que você é muito bom em manter sua própria nomenclatura e não haverá números após P-
part).
Os nomes de arquivos são fornecidos como argumentos de linha de comando, podem ser digitados um por um ou usados com curinga como mostrado aqui. Em seguida, lemos o novo número do usuário de forma interativa e inserimos esse novo número para cada nome de arquivo cortado.
$ ls
16115P-barfoo.h 16115P-foobar.c 16115P-foobar.md updateNames.sh*
$ ./updateNames.sh 16115*
Enter new number for all specified files:
17121
17121P-barfoo.h
17121P-foobar.c
17121P-foobar.md
$ cat updateNames.sh
#!/bin/bash
if [ $# -eq 0 ];
then
echo "<<< Error: no arguments provided"
exit 1
fi
echo "Enter new number for all specified files: "
read NEWNUMBER
for file in "$@";
do
BASE="$(echo "$file" | awk -F '-' '{ gsub( /[[:digit:]]/,""); print }')"
echo $NEWNUMBER""$BASE
# uncomment this line for actual copying
# cp "$file" $NEWNUMBER""$BASE
done
$