Como sincronizar tempos de arquivo de uma árvore de diretórios para outra

2

Eu tenho duas árvores de arquivos. O primeiro consiste em arquivos originais. O segundo é uma duplicata, mas sem registros de data e hora corretos, eles estão todos configurados para a última data de duplicação.

Existe uma maneira fácil e limpa de copiar os registros de data e hora de arquivos de uma árvore para outra, sem transferir o conteúdo dos arquivos novamente?

Adicionar: As duas árvores podem diferir ligeiramente em alguns arquivos, como a duplicata feita em algum momento no passado. Os timestamps devem ser atualizados apenas quando possível.

    
por dronus 24.08.2013 / 18:48

3 respostas

2

Você pode tentar:

cd /path/to/old/directory

find . -exec touch "/path/to/new/directory/{}" --reference "{}" \;

touch --reference someotherfile altera a data e a hora de um arquivo usando someotherfile como referência.

Se as árvores forem idênticas, a parte {} será expandida para o mesmo arquivo nas duas árvores e o novo prefixo de diretório fará o resto. Você pode usar echo em vez de touch para verificar se os arquivos corretos estão sendo percorridos.

É claro que isso executa um processo touch para cada arquivo. Possivelmente, um script Python funcionaria de forma mais eficiente.

    
por 24.08.2013 / 19:21
2

Um pequeno script python serve:

#!/usr/bin/python

import os
import sys

for directory,subdirs,files in os.walk('.'):
    pathes=subdirs+files
    for path in pathes:
        fullpath=os.path.join(directory,path)
        target_path=os.path.join(sys.argv[1],fullpath)
        mtime=os.lstat(fullpath).st_mtime
        print 'touching',target_path,':',
        try:
            os.utime(target_path,(mtime,mtime))
            print 'OK'
        except:
            print 'FAILED'

tem que ser executado no diretório de origem, considerando o dir de destino como o único argumento, por exemplo:

python ~/sync_tstamps.py /path/to/target_dir

    
por 25.08.2013 / 17:07
1

Tente usar a opção rsync e sua --size-only .

rsync -avi --size-only A/ B/

Isso só deve verificar os tamanhos dos arquivos e atualizar os timestamps.

    
por 24.08.2013 / 19:03