cp --update ainda copia arquivos inalterados

1

Estou tentando copiar apenas arquivos alterados usando 'cp -pu' no Linux (Red Hat 6.1, FS de origem / destino são partições montadas em GlusterFS) mas descobri que ele ainda tenta copiar arquivos aparentemente antigos e inalterados. Na verdade, apenas executando o mesmo comando novamente iria pular para o próximo arquivo. Eu posso reproduzir o problema no teste mostrado abaixo. Repare que no teste, eu apertei o controle-C para parar o comando cp interativo a cada vez que ele pede. A segunda execução ignoraria o arquivo solicitado na primeira execução. Por que isso acontece? E há uma ferramenta padrão melhor e mais rápida para copiar diretórios montados localmente? (Eu provavelmente poderia tentar o rsync, mas não preciso ser super preciso, já que os dados são apenas para testes e estou preocupado com sua velocidade.)

 [root@flex 6b42]# for d in *.story; do echo trying $d; ls -al $d
 /data/staging/./storage01/42/6b/6b42/$d; cp --parent -rpu -v -i $d
 /data/staging/./storage01/42/6b/6b42/; done trying
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story: total 228 drwxrwx---    2
 somebody somebody     53 Jan  8 02:23 . drwxrwx--- 1280 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp

 /data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-62d0c6aa4a26.story:
 total 228 drwxrwx---    2 somebody somebody     53 Jan  8 02:23 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp cp: overwrite
 '/data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-2d0c6aa4a26.story/.timestamp'?
 ^C [root@flex 6b42]# for d in *.story; do echo trying $d; ls -al $d
 /data/staging/./storage01/42/6b/6b42/$d; cp --parent -rpu -v -i $d
 /data/staging/./storage01/42/6b/6b42/; done trying
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story: total 228 drwxrwx---    2
 somebody somebody     53 Jan  8 02:23 . drwxrwx--- 1286 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp

 /data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-62d0c6aa4a26.story:
 total 228 drwxrwx---    2 somebody somebody     53 Jan  8 02:23 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp trying 0aee088d-af48-1236-bcae-6d2033a2acb7.story
 0aee088d-af48-1236-bcae-6d2033a2acb7.story: total 232 drwxrwx---    2
 somebody somebody     53 Jan  7 09:39 . drwxrwx--- 1286 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   5952 Dec 19 12:40 data
 -rw-r--r--    1 somebody somebody      0 Dec 19 12:40 images
 -rw-r-----    1 somebody somebody     17 Dec 19 12:40 .timestamp

 /data/staging/./storage01/42/6b/6b42/0aee088d-af48-1236-bcae-6d2033a2acb7.story:
 total 232 drwxrwx---    2 somebody somebody     53 Jan  7 09:39 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   5952 Dec 19 12:40 data
 -rw-r--r--    1 somebody somebody      0 Dec 19 12:40 images
 -rw-r-----    1 somebody somebody     17 Dec 19 12:40 .timestamp cp: overwrite
 '/data/staging/./storage01/42/6b/6b42/0aee088d-af48-1236-bcae-6d2033a2acb7.story/.timestamp'?
 ^C
    
por Hacking Bear 07.06.2012 / 19:58

2 respostas

1

cp --update não verifica se os arquivos são diferentes, apenas compara os timestamps.

O rsync, que você já conhece, parece adequado para sua situação.

Use rsync -av $d/ /data/staging/./storage01/42/6b/6b42/$d/

    
por 08.06.2012 / 03:42
0

Se você está preocupado apenas com a velocidade, rsync não é um opção para um backup local, ao contrário do que a outra resposta diz. Eu também estou confuso com -u , mas no final, se produz o que você precisa no destino, provavelmente não há nada mais rápido. Se você precisar fazer atualizações freqüentes e sempre usar o mesmo comando, esperamos que, da próxima vez, os timestamps sejam como o cp -u os espera.

    
por 02.11.2014 / 20:05