ADVERTENCIA: Sin soluciones especiales, GNU cp --attributes-only
truncará los archivos de destino, al menos en Precise. Vea la edición a continuación.
Original:
En esta situación, es probable que desee la --attributes-only
opción GNU cp , junto con --archive
, ya que es un código probado y probado, que hace todos los atributos independientes del sistema de archivos y no sigue los enlaces simbólicos (¡seguirlos puede ser malo!):
cp --archive --attributes-only /source/of/failed/backup/. /destination/
Al igual que con los archivos, cp
es aditivo con atributos extendidos: si tanto el origen como el destino tienen atributos extendidos, agrega los atributos extendidos del origen al destino (en lugar de eliminar todos los xattrs del destino primero). Si bien esto refleja cómo se cp
comporta si copia archivos en un árbol existente, puede que no sea lo que espera.
También tenga en cuenta que si no conservó los enlaces duros la primera vez rsync
pero desea conservarlos ahora, entonces cp
no lo solucionará por usted; probablemente sea mejor volver a ejecutar rsync
con las opciones correctas (ver mi otra respuesta ) y ser paciente.
Si encontró esta pregunta mientras buscaba separar y recombinar deliberadamente el contenido de metadatos / archivos, entonces puede echar un vistazo a metastore que se encuentra en los repositorios de Ubuntu.
Fuente: manual de GNU coreutils
Editado para agregar:
cp
desde GNU coreutils
> = 8.17 y superior funcionará como se describe, pero coreutils <= 8.16 truncará los archivos al restaurar sus metadatos. En caso de duda, no lo use cp
en esta situación; usar rsync
con las opciones correctas y / o ser paciente.
No recomendaría esto a menos que entiendas completamente lo que estás haciendo, pero antes cp
se puede evitar que GNU trunque archivos usando el truco 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);
}