PERINGATAN: Tanpa solusi khusus, GNU cp --attributes-onlyakan memotong file tujuan, setidaknya dalam Precise. Lihat hasil edit di bawah.
Asli:
Dalam situasi ini, Anda mungkin menginginkan --attributes-onlyopsi GNU cp , bersama dengan --archive, ketika kode ini dicoba dan diuji, apakah semua atribut filesystem-agnostik dan tidak mengikuti symlink (mengikutinya bisa buruk!):
cp --archive --attributes-only /source/of/failed/backup/. /destination/
Seperti halnya file, cpaditif dengan atribut yang diperluas: jika kedua sumber dan tujuan memiliki atribut yang diperluas, ia menambahkan atribut yang diperluas sumber ke tujuan (daripada menghapus semua xattrs tujuan terlebih dahulu). Meskipun ini mencerminkan bagaimana cpperilaku jika Anda menyalin file ke pohon yang ada, itu mungkin tidak seperti yang Anda harapkan.
Perhatikan juga bahwa jika Anda tidak menyimpan tautan keras pertama kali rsynctetapi ingin mempertahankannya sekarang cp tidak akan memperbaikinya untuk Anda; Anda mungkin terbaik menjalankan kembali rsyncdengan opsi yang tepat (lihat jawaban saya yang lain ) dan bersabar.
Jika Anda menemukan pertanyaan ini sambil berusaha memisahkan dan menggabungkan kembali konten metadata / file dengan sengaja maka Anda mungkin ingin melihat metastore yang ada di dalam repositori Ubuntu.
Sumber: manual GNU coreutils
Diedit untuk menambahkan:
cpdari GNU coreutils> = 8.17 dan di atas akan berfungsi seperti yang dijelaskan, tetapi coreutils <= 8.16 akan memotong file ketika memulihkan metadata mereka. Jika ragu, jangan gunakan cpdalam situasi ini; gunakan rsyncdengan opsi yang tepat dan / atau bersabarlah.
Saya tidak akan merekomendasikan hal ini kecuali jika Anda sepenuhnya memahami apa yang Anda lakukan, tetapi GNU sebelumnya cpdapat dicegah memotong file menggunakan trik 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);
}