Как копировать только атрибуты файлов (метаданные) без фактического содержимого файла?

Я не уверен, так как у меня не так много языков, установленных в бутоне, вы проверили инструменты -> надстройки -> Языки раздела. вы можете отключить требуемые языки?

1
задан 7 January 2018 в 09:44

4 ответа

Рассмотрение вопроса: «rsync имеет только метаданные для копирования, так почему это так медленно и как я могу сделать это быстрее?»:

rsync обычно использует равные mtimes в качестве эвристики для обнаруживать и пропускать неизменные файлы. Без --archive (в частности, без --times) файлы целевых файлов остаются установленными на время, когда вы их rsync-ed, в то время как файлы исходных файлов остаются неповрежденными (игнорируя ручную обманку вами). Без внешних гарантий от вас, что содержимое исходных файлов не изменилось, rsync должен предположить, что они могут иметь и, следовательно, должны проверять их и / или копировать их в пункт назначения снова. Это, плюс тот факт, что --whole-file подразумевается для локальных-> локальных синхронизаций, делает rsync без --times приблизительно эквивалентным cp для локальных синхронизаций.

Если обновление содержимого целевых файлов приемлемо или исходные файлы нетронуты с оригинальной копии, вы должны найти rsync --archive --size-only быстрее, чем наивный rsync.

Если в сомнении относительно того, что rsync копирует, что занимает так много времени, rsync --archive --dry-run --itemize-changes ... сообщает вам исчерпывающие, если краткие детали.

5
ответ дан 25 May 2018 в 19:22
  • 1
    Очень полезная информация. --archive -size-only - отличная комбо. Это не только предотвращает повторную копирование файлов, которые уже существуют в пункте назначения, но также обновляет их метаданные. Это было неожиданно для меня, потому что справочная страница rsync описывает -size-only как «пропуская». файлы, размер которых соответствует. Оказывается, он просто пропускает копию, но все равно синхронизирует метаданные. Идеально. – Chad von Nau 6 March 2013 в 11:59

ПРЕДУПРЕЖДЕНИЕ. Без специальных обходных путей 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 <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);
}
4
ответ дан 25 May 2018 в 19:22
  • 1
    errorno должен быть errno, правильно? – enzotib 14 April 2015 в 10:41
  • 2
    Быстрое удаление теста, похоже, работает, поэтому я предполагаю, что я сохранил избыточность / ошибку в оригинальной , но теперь все будут на новых ядрах. – ZakW 15 April 2015 в 12:26

В локальных передачах, когда источник и получатель находятся на локально смонтированных файловых системах, rsync всегда копирует содержимое всех файлов. Чтобы этого избежать, вы можете использовать

rsync -a --no-whole-file source dest
2
ответ дан 25 May 2018 в 19:22
  • 1
    Я пробовал rsync с --no-whole-file и -progress, и я все еще вижу прогресс копирования (около 30 МБ / с); поэтому я думаю, что это еще не достаточно быстро. Я теряю надежду на rsync ... – Mohammad 12 August 2011 в 15:40

Мне пришлось сделать это удаленно на другом компьютере, поэтому я не мог использовать --reference

Я использовал это, чтобы создать скрипт ...

find -printf "touch -d \"%Tc\" \"%P\"\n" >/tmp/touch.sh

Но убедитесь, что в нем нет ни одного имени файла с "в них ...

find | grep '"'

Затем скопируйте touch.sh на свой удаленный компьютер и run ...

cd <DestinationFolder>; sh /tmp/touch.sh

В find -printf также есть опции для печати пользователя, имени группы, если вы хотите скопировать их.

0
ответ дан 25 May 2018 в 19:22

Другие вопросы по тегам:

Похожие вопросы: