1

Я пытаюсь скопировать только измененные файлы с помощью 'cp -pu' под Linux (Red Hat 6.1, исходная / целевая FS - это разделы, смонтированные на GlusterFS), но я обнаружил, что он все еще пытается скопировать файл, который выглядит старым и неизменным. На самом деле, если снова выполнить ту же команду, можно перейти к следующему файлу. Я могу воспроизвести проблему в тесте, показанном ниже. Обратите внимание, что в тесте я нажимаю control-C, чтобы останавливать интерактивную команду cp при каждом запросе. Второй запуск будет пропускать файл, заданный при первом запуске. Почему это происходит? И есть ли лучший, быстрый стандартный инструмент для копирования локально смонтированных каталогов? (Возможно, я мог бы попробовать rsync, но мне не нужно быть очень точным, поскольку данные предназначены только для тестирования, и я беспокоюсь о его скорости.)

 [root@flex 6b42]# for d in *.story; do echo trying $d; ls -al $d
 /data/staging/./storage01/42/6b/6b42/$d; cp --parent -rpu -v -i $d
 /data/staging/./storage01/42/6b/6b42/; done trying
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story: total 228 drwxrwx---    2
 somebody somebody     53 Jan  8 02:23 . drwxrwx--- 1280 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp

 /data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-62d0c6aa4a26.story:
 total 228 drwxrwx---    2 somebody somebody     53 Jan  8 02:23 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp cp: overwrite
 `/data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-2d0c6aa4a26.story/.timestamp'?
 ^C [root@flex 6b42]# for d in *.story; do echo trying $d; ls -al $d
 /data/staging/./storage01/42/6b/6b42/$d; cp --parent -rpu -v -i $d
 /data/staging/./storage01/42/6b/6b42/; done trying
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story: total 228 drwxrwx---    2
 somebody somebody     53 Jan  8 02:23 . drwxrwx--- 1286 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp

 /data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-62d0c6aa4a26.story:
 total 228 drwxrwx---    2 somebody somebody     53 Jan  8 02:23 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp trying 0aee088d-af48-1236-bcae-6d2033a2acb7.story
 0aee088d-af48-1236-bcae-6d2033a2acb7.story: total 232 drwxrwx---    2
 somebody somebody     53 Jan  7 09:39 . drwxrwx--- 1286 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   5952 Dec 19 12:40 data
 -rw-r--r--    1 somebody somebody      0 Dec 19 12:40 images
 -rw-r-----    1 somebody somebody     17 Dec 19 12:40 .timestamp

 /data/staging/./storage01/42/6b/6b42/0aee088d-af48-1236-bcae-6d2033a2acb7.story:
 total 232 drwxrwx---    2 somebody somebody     53 Jan  7 09:39 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   5952 Dec 19 12:40 data
 -rw-r--r--    1 somebody somebody      0 Dec 19 12:40 images
 -rw-r-----    1 somebody somebody     17 Dec 19 12:40 .timestamp cp: overwrite
 `/data/staging/./storage01/42/6b/6b42/0aee088d-af48-1236-bcae-6d2033a2acb7.story/.timestamp'?
 ^C

2 ответа2

1

cp --update не проверяет, отличаются ли файлы, он просто сравнивает временные метки.

Rsync, о котором вы, кажется, уже знаете, звучит как подходящий для вашей ситуации.

Используйте rsync -av $d/ /data/staging/./storage01/42/6b/6b42/$d/

0

Если вас интересует только скорость, rsync не подходит для локального резервного копирования, в отличие от того, что говорится в другом ответе. Я тоже сбит с толку -u, но, в конце концов, если он производит то, что вам нужно в пункте назначения, вероятно, ничего более быстрого. Если вам нужно делать частые обновления и всегда использовать одну и ту же команду, надеюсь, в следующий раз метки времени будут такими, как их ожидает cp -u.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .