AVISO: Sem soluções especiais, o GNU cp --attributes-onlytruncará os arquivos de destino, pelo menos no Precise. Veja a edição abaixo.
Original:
Nesta situação, você provavelmente deseja a --attributes-onlyopção do GNU cp , juntamente com --archive, como é um código testado e testado, faz todos os atributos independentes do sistema de arquivos e não segue links simbólicos (segui-los pode ser ruim!):
cp --archive --attributes-only /source/of/failed/backup/. /destination/
Como nos arquivos, cpé aditivo com atributos estendidos: se a origem e o destino tiverem atributos estendidos, os atributos estendidos da fonte serão adicionados ao destino (em vez de excluir primeiro todos os xattrs do destino). Embora isso reflita como cpse comporta se você copiar arquivos para uma árvore existente, pode não ser o que você espera.
Observe também que, se você não preservou os links físicos na primeira vez, rsyncmas deseja preservá-los agora, cp não o corrigirá; provavelmente é melhor executar novamente rsynccom as opções corretas (veja minha outra resposta ) e ser paciente.
Se você encontrou essa pergunta enquanto procurava deliberadamente separar e recombinar o conteúdo de metadados / arquivos, pode dar uma olhada no metastore que está nos repositórios do Ubuntu.
Fonte: Manual do GNU coreutils
Editado para adicionar:
cpdo GNU coreutils> = 8.17 e superior funcionará como descrito, mas o coreutils <= 8.16 truncará arquivos ao restaurar seus metadados. Em caso de dúvida, não use cpnesta situação; use rsynccom as opções certas e / ou seja paciente.
Eu não recomendaria isso, a menos que você entenda completamente o que está fazendo, mas o GNU anterior cppode ser impedido de truncar arquivos usando o truque LD_PRELOAD :
/*
* File: no_trunc.c
* Author: D.J. Capelis with minor changes by Zak Wilcox
*
* Compile:
* gcc -fPIC -c -o no_trunc.o no_trunc.c
* gcc -shared -o no_trunc.so no_trunc.o -ldl
*
* Use:
* LD_PRELOAD="./no_trunc.so" cp --archive --attributes-only <src...> <dest>
*/
#define _GNU_SOURCE
#include <dlfcn.h>
#define _FCNTL_H
#include <bits/fcntl.h>
extern int errorno;
int (*_open)(const char *pathname, int flags, ...);
int (*_open64)(const char *pathname, int flags, ...);
int open(const char *pathname, int flags, mode_t mode) {
_open = (int (*)(const char *pathname, int flags, ...)) dlsym(RTLD_NEXT, "open");
flags &= ~(O_TRUNC);
return _open(pathname, flags, mode);
}
int open64(const char *pathname, int flags, mode_t mode) {
_open64 = (int (*)(const char *pathname, int flags, ...)) dlsym(RTLD_NEXT, "open64");
flags &= ~(O_TRUNC);
return _open64(pathname, flags, mode);
}