AVERTISSEMENT: Sans solutions de contournement spéciales, GNU cp --attributes-only
tronquera les fichiers de destination, au moins en Précise. Voir l'édition ci-dessous.
Original:
Dans cette situation, vous voulez probablement l' --attributes-only
option de GNU cp , ainsi que --archive
, comme c'est du code éprouvé, fait tous les attributs agnostiques du système de fichiers et ne suit pas les liens symboliques (les suivre peut être mauvais!):
cp --archive --attributes-only /source/of/failed/backup/. /destination/
Comme pour les fichiers, cp
est additif avec des attributs étendus: si la source et la destination ont des attributs étendus, ils ajoutent les attributs étendus de la source à la destination (plutôt que de supprimer tous les xattrs de la destination en premier). Bien que cela reflète comment cp
se comporte si vous copiez des fichiers dans une arborescence existante, ce n'est peut-être pas ce que vous attendez.
Notez également que si vous n'avez pas conservé les liens durs la première fois avec rsync
mais que vous souhaitez les conserver maintenant, cp
cela ne résoudra pas cela pour vous; il vaut probablement mieux relancer rsync
avec les bonnes options (voir mon autre réponse ) et être patient.
Si vous avez trouvé cette question en cherchant à séparer et à recombiner délibérément le contenu des métadonnées / fichiers, vous voudrez peut-être jeter un œil au métastore qui se trouve dans les référentiels Ubuntu.
Source: manuel GNU coreutils
Modifié pour ajouter:
cp
depuis GNU coreutils
> = 8.17 et supérieur fonctionnera comme décrit, mais coreutils <= 8.16 tronquera les fichiers lors de la restauration de leurs métadonnées. En cas de doute, ne l'utilisez pas cp
dans cette situation; utiliser rsync
avec les bonnes options et / ou être patient.
Je ne recommanderais pas cela à moins que vous compreniez parfaitement ce que vous faites, mais GNU antérieur cp
peut être empêché de tronquer les fichiers en utilisant l' astuce 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);
}