Eu tenho vários diretórios com arquivos que geralmente têm o mesmo nome, mas podem ser diferentes e eu preciso que todos esses diretórios sejam mesclados em um novo.
Eu preciso ser capaz de comparar os mesmos arquivos nomeados e se o mesmo ignorar / substituir ou se diferente mover / renomear o mais antigo, acrescentando a data / hora de modificação para o nome do arquivo.
Para adicionar mais detalhes e endereçar @Serhat Cevikel e @Wildcard:
Os dados são armazenados em duas unidades com estrutura semelhante e, de certa forma, são complicadas, pois existem subpastas que precisam ser levadas em consideração.
Aqui está uma árvore do ambiente de teste que criei e alguns comentários:
/bmrlbackup/drive1/
'-- user001
'-- directory1
'-- project001
|-- file000 #identical
|-- file001 #older same name
|-- file0011 #unique
|-- phase1
| |-- file000 #identical
| |-- file110 #unique
| |-- file999 #newer same name
| '-- phase11
| '-- file111 #unique
'-- phase2
'-- file120 #unique
/bmrlbackup/drive2/
'-- user002
'-- directory2
'-- project001
|-- file000 #identical
|-- file001 #newer same name
|-- file0012 #unique
|-- phase1
| |-- file000 #identical
| |-- file210 #unique
| '-- file999 #older same name
'-- phase2
|-- file220 #unique
'-- phase21
'-- file221 #unique
A saída para o primeiro rsync:
#rsync -a --ignore-existing --remove-source-files $sd1/ $dd1/
project001/
project001/file0011
project001/phase1/
project001/phase1/file110
project001/phase1/phase11/
project001/phase1/phase11/file111
project001/phase2/
project001/phase2/file120
Alterou o remm (arquivos "mesmos" restantes) para listar os subdiretórios também:
#remm='ls -1 $(find $sd1/ -type f)'
/bmrlbackup/drive1/user001/directory1/project001/file000
/bmrlbackup/drive1/user001/directory1/project001/file001
/bmrlbackup/drive1/user001/directory1/project001/phase1/file000
/bmrlbackup/drive1/user001/directory1/project001/phase1/file999
Aqui, os dois arquivos:
/bmrlbackup/drive1/user001/directory1/project001/file000
/bmrlbackup/drive1/user001/directory1/project001/phase1/file000
são os mesmos em ambos os locais e não precisam ser copiados ou podem ser movidos e sobrescrever o destino.
O mesmo nome é diferente dos arquivos de conteúdo:
/bmrlbackup/drive1/user001/directory1/project001/file001
/bmrlbackup/drive1/user001/directory1/project001/phase1/file999
Os arquivos de "mesmo nome de conteúdo diferente" precisam ser comparados e o mais antigo precisa ser renomeado: anexado com a data e hora de modificação, portanto, se a origem for mais recente, acrescente o nome do arquivo de destino e mova a origem. se a origem for mais antiga, anexe o nome da origem e mova o nome da fonte anexada.
O resultante deste processo acabará por mover todos os arquivos da unidade1 para a unidade2.
Em seguida, todos os erros para o mais antigo = 'encontrar {$ sd1, $ dd1} ....
Conselhos?
Não há mais de 10000 arquivos em cada unidade com tamanhos de 4k a 800M.