Tenho vários diretórios cujos conteúdos se sobrepõem. Às vezes os arquivos são exatamente iguais, às vezes os nomes são iguais e o conteúdo é diferente e às vezes os arquivos com o mesmo nome têm conteúdos diferentes. Eu mesclo os diretórios da seguinte maneira:
$ rsync -aicPb --remove-source-files SOURCE-DIR/ TARGET-DIR/
Este comando faz quase exatamente o que eu quero. O problema é que as extensões dos arquivos não são preservadas. Ou seja, o -b
argumento faz com que TARGET-DIR/pictureA.jpg
seja renomeado para TARGET-DIR/pictureA.jpg~
, quando SOURCE-DIR/pictureA.jpg
for copiado para TARGET-DIR/
.
Existe alguma maneira de preservar as extensões de arquivo ao rsync
renomear arquivos duplicados? Por exemplo, TARGET-DIR/pictureA.jpg
deve ser renomeado para TARGET-DIR/pictureA~.jpg
.
Você provavelmente terá que lidar com isso com um programa separado para "consertar" os nomes dos arquivos. Aqui está um exemplo no bash para começar:
Ele pressupõe que você deseja renomear todos os arquivos que terminam em
~
. Caso contrário, use--suffix
no rsync para definir um sufixo exclusivo. O nome do arquivo é comparado com regex\.(...)~$
, ou seja, um ponto, 3 caracteres e um til no final. Os 3 caracteres são capturados devido ao()
array interno do bashBASH_REMATCH
. O novo nome de arquivo é criado a partir do nome antigo com o.???~
padrão glob removido do final e o novo til, ponto e extensão capturada adicionados.-e
testa se o novo arquivo já existe, caso contrário ele é renomeado.Depois de mais pesquisas, encontrei uma ferramenta chamada rclone , que faz exatamente o que eu quero. Para quem estiver interessado, aqui está o comando que utilizo para conseguir o que desejo: