Como mover arquivos recursivos de um diretório para outro e os mesmos arquivos de nome renomear o antigo acrescentando seu tempo de modificação

0

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 !!!

    
por fptstl 12.01.2017 / 23:30

2 respostas

0

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

    
por 13.01.2017 / 00:11
0

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)
    
por 13.01.2017 / 03:08