Você pode usar "diff" para comparar FILES linha por linha. veja também este post find mtime . Então você pode usar o comando mv para mover o arquivo antigo
Eu preciso mover recursivamente todos os arquivos de uma unidade para outra e os mesmos arquivos de caminho / nome renomear se for diferente do mais antigo adicionando ao nome do arquivo a hora da modificação. Os mesmos arquivos de caminho / nome são sobrescritos. Os tamanhos dos arquivos variam entre 5K e 500M.
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 rsync para mover os arquivos exclusivos:
#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
Os arquivos restantes a serem movidos:
#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, existem arquivos que são os mesmos em ambos os locais e precisam ser movidos e sobrescrever o destino:
/bmrlbackup/drive1/user001/directory1/project001/file000
/bmrlbackup/drive1/user001/directory1/project001/phase1/file000
E aqui há arquivos com o mesmo nome, mas conteúdo diferente:
/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 movido renomeado com a data e hora da modificação, portanto, se a origem for mais recente, anexe 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.
Por favor, por favor, AJUDA !!!
Você pode usar "diff" para comparar FILES linha por linha. veja também este post find mtime . Então você pode usar o comando mv para mover o arquivo antigo
Use rsync com --update e --backup em ambas as direções:
-u, --update skip files that are newer on the receiver
-b, --backup make backups (see --suffix & --backup-dir)