rename
funciona dessa maneira porque pode mover arquivos entre diretórios. Como mv
, ele age em todo o caminho, não apenas no último componente.
Se você quiser modificar somente o último componente, poderá ancorar seu regexp em (\A|?<=/)
e garantir que ele não corresponda a nenhum /
e que corresponda apenas ao último /
.
rename 's~(\A|?<=/)(?=[^/]*)\z~assi_~' t1/inv_customer1*
Outra abordagem é primeiro dividir o nome do arquivo.
rename 's~(.*/)~~s; my $d = $1; s/\A/assi_/; $_ = "$d$_"' t1/inv_customer1*
Você também pode usar o módulo File::Spec
. Isso tem a vantagem de lidar com caminhos não-Unix.
rename 'use File::Spec::Functions; my ($v,$d,$f) = splitpath($_); $f =~ s/\A/assi_/; $_ = catpath($v,$d,$f)' t1/inv_customer1*