rsync игнорирует владельца, группу, время и привилегии

67

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

alsanal
источник

Ответы:

94

Я думаю , что вы можете использовать -no-варианты , rsyncчтобы НЕ копировать права собственности или права доступа файлов вы sync'ing.

Выдержка из страницы руководства rsync

--no-OPTION
       You may turn off one or more implied options by prefixing the option 
       name with "no-".  Not all options may be pre‐fixed  with  a  "no-":  
       only options that are implied by other options (e.g. --no-D, 
       --no-perms) or have different defaults in various circumstances (e.g. 
       --no-whole-file, --no-blocking-io, --no-dirs).  You may specify 
       either the short or the long option name after the "no-" prefix (e.g. 
       --no-R is the same as --no-relative).

       For example: if you want to use -a (--archive) but don’t want -o 
       (--owner), instead of converting -a into -rlptgD, you could specify 
       -a --no-o (or -a --no-owner).

       The order of the options is important:  if you specify --no-r -a, the 
       -r option would end up being turned on,  the opposite  of  -a  
       --no-r.   Note  also  that the side-effects of the --files-from 
       option are NOT positional, as it affects the default state of several 
       options and slightly changes the meaning of -a (see the  --files-from
       option for more details).

Владение и разрешения

Просматривая справочную страницу, я думаю, вы захотите использовать что-то вроде этого:

$ rsync -avz --no-perms --no-owner --no-group ...

Чтобы удалить файлы, которые не существуют, вы можете использовать --deleteпереключатель:

$ rsync -avz --no-perms --no-owner --no-group --delete ....

Timestamps

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

-I, --ignore-times
       Normally  rsync will skip any files that are already the same size 
       and have the same modification timestamp.  This option turns off this 
       "quick check" behavior, causing all files to be updated.

Обновить

Для отметок времени, --no-timesможет сделать то, что вы ищете.

SLM
источник
при использовании --no-times я все еще вижу много файлов (с подробными изменениями), помеченных с использованием, >f..T...которые предполагают, что на месте назначения установлены флажки файлов и время модификации, чего я и стараюсь избегать.
Майкл
17

Я думаю, что легче избежать опции -a

$ -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

и установите только те параметры, которые вы хотите.

Если вам нравятся все параметры, но не модификации пользователя -o , group -g , time -t и permissions -p, вы можете вычесть эти четыре параметра из эквивалента архива.

$ -rlD

Чтобы удалить файлы в месте назначения, используйте опцию --delete .

На ваш вопрос: Но я думаю, что все файлы будут проверены - rsync не может передавать / проверять только файлы, которые были изменены только содержимым.

UsersUser
источник
-lдля ссылок, -Dустройств (рассматривается так же, как --specials), я думаю, что -rодного достаточно, если мы говорим о контенте.
sdkks
7

Я думаю, что вы ищете вариант

rsync -r --size-only

со страницы руководства:

--size-only
   This  modifies  rsync’s  "quick  check"  algorithm  for finding files that need to be transferred,
   changing it from the default of transferring files  with  either  a  changed  size  or  a  changed
   last-modified  time  to  just  looking  for  files that have changed in size.  This is useful when
   starting to use rsync after using another mirroring  system  which  may  not  preserve  timestamps
   exactly.

Если вы действительно хотите удалить файлы, отсутствующие в каталоге dir, используйте --delete

rubo77
источник
4

Вы можете заставить rsync игнорировать проверки, основанные на времени и размере мода файла, и использовать подход на основе chksum с ключом -c.

-c, --checksum              skip based on checksum, not mod-time & size

Это означает, что для этого нужно сравнить весь файл по частям (и передать соответствующие метаданные туда и обратно между источником и местом назначения) независимо от того, совпадают ли время и размер файла, но будет передавать только те чаны, которые отличаются между источником и местом назначения.

Использование этого переключателя в сочетании с другими переключателями, предложенными другими, должно ограничивать то, что копируется (только копирование того, что изменилось), и имеет преимущество, заключающееся в проверке согласованности между источником и назначением, НО это занимает больше времени в зависимости от скорости вашего соединения, так как он должен чксумить файл кусками с обеих сторон и сравнить).

Энтони ДФХ
источник
Я сомневаюсь, что именно это имел в виду OP. Проблема, похоже, не связана с тем, как были выбраны файлы, но атрибуты скопированы, и выбранный (также наиболее одобренный) ответ уже охватывает это.
Джули Пеллетье
-3

Команда ниже будет работать отлично, я проверил ее на собственное требование, она займет только изменение содержимого.

rsync -acvzh source/ destination/
Чарльз Дж
источник