Como a resposta à pergunta que você vinculou já declara, mv
pode sufocar arquivos que, de outra forma, seriam substituídos pelo arquivo movido por um número para fornecer um nome de arquivo exclusivo:
mv --backup=t <source_file> <dest_file>
O comando funciona anexando o próximo sufixo de número não usado ao arquivo que foi o primeiro no diretório de destino. O arquivo que você está movendo manterá seu nome original.
No entanto, isso adicionará sufixos como .~1~
, o que parece não ser o que você deseja:
$ ls
file.pdf
file.pdf.~1~
file.pdf.~2~
Você pode renomear esses arquivos em uma segunda etapa para obter os nomes em um formato como file_1.pdf
em vez de file.pdf.~1~
, por exemplo, assim:
rename 's/((?:\..+)?)\.~(\d+)~$/_$2$1/' *.~*~
Isso leva todos os arquivos que terminam com o sufixo de backup indesejado (correspondendo ao shell glob *.~*~
) e permite que a ferramenta rename
tente corresponder à expressão regular ((?:\..+)?)\.~(\d+)~$
no nome do arquivo. Se isso corresponder, ele capturará o índice do sufixo .~1~
-like como segundo grupo ( $2
) e, opcionalmente, se o nome do arquivo tiver uma extensão antes desse sufixo como .pdf
, isso será capturado pelo primeiro Código de grupo%). Em seguida, ele substitui a parte completa do nome do arquivo correspondente por $1
, inserindo os valores capturados em vez dos marcadores de posição.
Basicamente, ele será renomeado _$2$1
a file.pdf.~1~
e file_1.pdf
a something.~42~
, mas não é possível detectar se um arquivo tem várias extensões, por exemplo, something_42
se tornaria archive.tar.gz.~5~