O utilitário perl
-based rename
pode usar qualquer instrução perl
para renomear arquivos, não apenas o operador s///
de pesquisa e substituição ou o operador y//
translation (apenas certifique-se de definir $_
para o que você deseja que o arquivo seja renomeado para).
De man rename
:
"rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_
string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input.
Por exemplo:
rename 'my($b,$e) = m/^(.*)\.([^.]+)$/; $b =~ s/\./_/g; $_="$b.$e"' files
Isso divide os nomes dos arquivos em nome base ($ b) e extensão ($ e). $ b então tem todos os períodos ( .
) substituídos por sublinhados. Finalmente, $_
está definido como "$b.$e"
.
Saída (com a opção -v
verbose):
$ touch top_axi_256_wrapper_05.02.01.14.00_sample06.tgz \
top_axi_128_wrapper_05.02.01.14.00_sample06.tgz \
a72_a_0.0.0_0.00.04_ac_dc.tgz
$ rename -v 'my($b,$e) = m/^(.*)\.([^.]+)$/; $b =~ s/\./_/g; $_="$b.$e"' *
a72_a_0.0.0_0.00.04_ac_dc.tgz renamed as a72_a_0_0_0_0_00_04_ac_dc.tgz
top_axi_128_wrapper_05.02.01.14.00_sample06.tgz renamed as top_axi_128_wrapper_05_02_01_14_00_sample06.tgz
top_axi_256_wrapper_05.02.01.14.00_sample06.tgz renamed as top_axi_256_wrapper_05_02_01_14_00_sample06.tgz
BTW, use -n
ao testar suas instruções rename
. Mais de man rename
:
-n, -nono
No action: print names of files to be renamed, but don't rename.
perl rename
está disponível empacotado para a maioria das distros (por exemplo, o pacote rename
no Debian), ou de link