Intereting Posts

См. Только изменения при запуске rsync

Я использую rsync для резервного копирования файлов с Mac на внешний жесткий диск. Например:

 rsync -av --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures" 

Прежде чем я это сделаю, я запускаю ту же команду в сухом режиме, добавив параметр -n :

 rsync -avn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures" 

Насколько я понимаю, я должен видеть только разницу, что будет скопировано / изменено, но по какой-то причине все папки и файлы распечатываются. Хотя, если я тестирую одну и ту же команду локально с двумя папками, я вижу только разницу в том, что изменилось. Почему это так и как я могу это исправить?

Обновлено:

После добавления опции -i (благодаря ответу Learner) я смог определить, почему все файлы попадают в список. Кажется, что разрешения не копируются. Все папки (и файлы) имеют следующее:

 .d...p... my folder/ 

Я добавил параметр -p-o , -g ), который должен скопировать разрешения, но все равно не повезло. Есть идеи?

Существует опция -i для rsync, которая обозначает --itemize-changes . В руководстве rsync говорится, что он будет «выводить сводку изменений для всех обновлений» .

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

Вот пример. Я создал directory1 и directory2 . Оба содержат файл с именем textfile и оба файла имеют буква «А» внутри. Но файл в каталоге1 имеет разную временную метку. Итак, выполнение rsync -ahzi directory1/ directory2/ дает мне:

 .d..t...... ./ >f..t...... textfile 

> означает, что файл был перенесен на локальную цель, потому что он был другим (если вы, например, будете rsync-файлы в 192.168.1.100:/some/directory , вы увидите < , потому что тогда это будет удаленная цель). f означает «файл», а t означает, что временная метка этого файла отличается.

Теперь, что изменилось и содержимое файла? Я редактировал текстовый файл в каталоге1, поэтому он содержит буквы «AB». Затем я выполнил rsync -ahzi directory1/ directory2/ :

 .d..t...... ./ >f.st...... textfile 

Существует > показ, что файлы были перенесены в цель, потому что это было другое. Говорят, что размер файла был другим, и мы говорим, что временная метка была другой.

Другие «флаги», которые вы могли видеть в этом выпуске, включают:

 p - Permission are different o - Owner is different g - Group is different a - The ACL information changed 

Мой источник, где я получил объяснение для всех этих флагов: http://andreafrancia.blogspot.com/2010/03/as-you-may-know-rsyncs-delete-options.html

Вероятная проблема заключается в том, что гранулярность временной метки отличается от внешнего накопителя, и rsync не учитывает это. Вы можете обойти это с помощью опции --modify-window :

--modify-window
При сравнении двух временных меток rsync обрабатывает отметки времени как равные, если они находятся в пределах значения modify_window. Обычно это ноль, но в некоторых ситуациях вам может быть полезно установить это большее значение. В частности, при передаче в / из файловых систем FAT, которые не могут представлять времена с разрешением 1 секунду, эта опция полезна.

Отражая измененный вопрос: посмотрите на странице руководства rsync подробную информацию о битах для --itemize-changes . Разрешены только разрешения. Большинство простых в использовании внешних накопителей – это vfat: Microsoft-format, ваши права на файлы Unix не будут соответствовать (потому что нет аналогов для группы и других разрешений, а также потому, что большинство приложений не утруждают себя попытками для сопоставления разрешения выполнения для соответствия Unix). В этом случае вы не можете копировать разрешения. Вы можете обойти это, используя опцию --chmod (путем подачи маски, которая сообщает rsync какие разрешения он может ожидать в пункте назначения):

--chmod
Эта опция сообщает rsync применить одну или несколько разделенных запятыми строк «chmod» к разрешению файлов в передаче. Результирующее значение обрабатывается так, как если бы это были разрешения, предоставляемые передающей стороной для файла , что означает, что этот параметр может не влиять на существующие файлы, если –perms не включен.

Как отметил Томас, проблема связана с форматом жестких дисков (предлагаемое решение --chmod не работает для меня). Мой внешний hdd – это ExFAT а hdd для Mac OS ExtendedMac OS Extended . Итак, я сделал несколько поисковых запросов и нашел решение здесь >>

a: архив, заменяет ключи rlptgoD (рекурсивные dirs, сохраняет символические ссылки, сохраняет разрешения, сохраняет время модификации, сохраняет группы, сохраняет владельца и сохраняет файлы Device).

Проблема в том, что exfAT Linux не справляется с коммутаторами, которые относятся к разрешениям (pgo), поэтому решение должно запустить rsync со следующими ключами, удалив p, g и o:

Поэтому ответ на мой вопрос:

 rsync -rltDvn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures" 

Теперь я вижу только измененные файлы. Спасибо всем за помощь.