UYARI: Özel geçici çözümler olmadan, GNU cp --attributes-only
hedef 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-only
birlikte GNU cp'nin seçeneğinin --archive
tü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 cp
olduğ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, cp
dosyaları 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, rsync
ancak ş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:
cp
GNU'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, cp
bu durumda kullanmayın ; kullanmak rsync
ile 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);
}