UYARI: Özel geçici çözümler olmadan, GNU cp --attributes-onlyhedef dosyaları en azından Kesin olarak keser. Aşağıdaki düzenlemeye bakınız.
Orijinal:
Bu durumda, muhtemelen denenmiş ve test edilmiş bir kodla --attributes-onlybirlikte GNU cp'nin seçeneğinin --archivetüm dosya sistemi-agnostik özniteliklerini yapmasını ve sembolik izleri izlemesini istemezsiniz (bunları izlemeniz kötü olabilir!):
cp --archive --attributes-only /source/of/failed/backup/. /destination/
Dosyalarda cpolduğu gibi , genişletilmiş özelliklere eklenir : hem kaynak hem de hedef genişletilmiş özelliklere sahipse , kaynağın genişletilmiş niteliklerini hedefe ekler (ilk önce hedefin tüm xattr'lerini silmek yerine). Bu, cpdosyaları mevcut bir ağaca kopyaladığınızda nasıl davrandığını yansıtsa da, beklediğiniz gibi olmayabilir.
Ayrıca, ilk kez zor bağlantıları korumazsanız, rsyncancak şimdi korumak istiyorsanız, o cp zaman bunu sizin için düzeltmeyeceğinizi unutmayın; Muhtemelen rsync, doğru seçeneklerle uğraşmakta en iyisisin ( diğer cevabımı gör ) ve sabırlı ol.
Meta veri / dosya içeriğini kasıtlı olarak ayırıp yeniden birleştirmeyi ararken bu soruyu bulursanız , Ubuntu depolarındaki metastore'a bakmak isteyebilirsiniz .
Kaynak: GNU coreutils manual
Eklemek için düzenlendi:
cpGNU'dan coreutils> = 8.17 ve üzeri açıklandığı gibi çalışacaktır, ancak <= 8.16 çekirdekleri meta verilerini geri yüklerken dosyaları kesecektir. Şüpheniz varsa, cpbu durumda kullanmayın ; kullanmak rsyncile sağ seçenekleri ve / veya sabırlı olun.
Ne yaptığınızı tam olarak anlamadığınız sürece bunu tavsiye etmem, ancak daha önce GNU'nun LD_PRELOAD numarasınıcp kullanarak dosyaları kısaltması engellenebilir :
/*
* 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);
}