ATTENZIONE: senza particolari soluzioni alternative, GNU cp --attributes-onlytroncherà i file di destinazione, almeno in Precise. Vedi la modifica qui sotto.
Originale:
In questa situazione probabilmente vuoi l' --attributes-onlyopzione GNU cp , insieme al --archivecodice provato e testato, fa tutti gli attributi indipendenti dal filesystem e non segue i collegamenti simbolici (seguirli può essere un male!):
cp --archive --attributes-only /source/of/failed/backup/. /destination/
Come per i file, cpè additivo con attributi estesi: se sia l'origine che la destinazione hanno attributi estesi, aggiunge gli attributi estesi dell'origine alla destinazione (anziché eliminare prima tutti gli xattr di destinazione). Mentre questo rispecchia il cpcomportamento se copi i file in un albero esistente, potrebbe non essere quello che ti aspetti.
Nota anche che se non hai conservato gli hard link per la prima volta, rsyncma vuoi conservarli ora cp , non risolverai questo problema per te; probabilmente è meglio riprovare rsynccon le giuste opzioni (vedi la mia altra risposta ) ed essere paziente.
Se hai trovato questa domanda mentre cercavi di separare e ricombinare deliberatamente i contenuti di metadati / file, allora potresti voler dare un'occhiata al metastore che si trova nei repository di Ubuntu.
Fonte: manuale GNU coreutils
Modificato per aggiungere:
cpda GNU coreutils> = 8.17 e successivi funzionerà come descritto, ma coreutils <= 8.16 troncerà i file quando ripristinano i loro metadati. In caso di dubbio, non utilizzare cpin questa situazione; usare rsynccon le giuste opzioni e / o avere pazienza.
Non lo consiglierei a meno che tu non comprenda appieno quello che stai facendo, ma a GNU precedente cppuò essere impedito di troncare i file usando il trucco 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);
}