ПРЕДУПРЕЖДЕНИЕ. Без специальных обходных путей GNU cp --attributes-only усекает файлы назначения, по крайней мере, в Precise. См. Править ниже.
ПРЕДУПРЕЖДЕНИЕ. Без специальных обходных путей GNU cp --attributes-only усекает файлы назначения, по крайней мере, в Precise. См. Править ниже.
В этой ситуации вам, вероятно, понадобится опция --attributes-only GNU cp вместе с --archive, поскольку она проверена и проверена кодом, делает все атрибуты агностики в файловой системе и не делает : cp --archive --attributes-only /source/of/failed/backup/. /destination/
Как и в случае с файлами, cp является аддитивным с расширенными атрибутами: если оба источника и получателя имеют расширенные атрибуты, он добавляет расширенные атрибуты источника к месту назначения (вместо того, чтобы сначала удалить все назначения xattrs адресата). Хотя это отражает то, как cp ведет себя, если вы копируете файлы в существующее дерево, возможно, это не так, как вы ожидаете.
Также обратите внимание, что если вы не сохранили жесткие ссылки в первый раз с rsync но хочу сохранить их сейчас, тогда cp не исправит это для вас; вам, вероятно, лучше всего переиграть rsync с правильными параметрами (см. мой другой ответ) и быть терпеливым.
Если вы обнаружили, что этот вопрос, глядя на , не будет разделять и рекомбинировать содержимое метаданных / файлов, тогда вы можете взглянуть на другой ответ который находится в репозиториях Ubuntu.
Источник: GNU coreutils manual
добавляет
cp из GNU coreutils> = 8.17 и выше будет работать, как описано, но coreutils & lt; = 8.16 будет обрезать файлы при восстановлении их метаданных. Если вы сомневаетесь, не используйте cp в этой ситуации; использовать rsync с GNU coreutils manual и / или быть терпеливым.
Я бы не рекомендовал это, если вы не полностью понимаете, что делаете, но ранее GNU cp может быть предотвращено усечение файлов с помощью трюка 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
*/
#define _GNU_SOURCE
#include
#define _FCNTL_H
#include
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);
}