У меня есть музыка, которую я играю в своей машине, с USB-накопителя FAT32. Папка, в которую я помещаю песни, хранится на моем жестком диске EXT4. Я регулярно добавляю / удаляю / повторно помечаю песни и иногда хочу rsync
внести изменения в карту памяти USB. Но по неизвестной причине (может быть, разрешения?) rsync
копирует все файлы каждый раз, а не только измененные. Я звоню rsync
как:
rsync -vrlptgD source dest
Как я могу заставить его работать так, как я хочу (т. Е. Знать, когда файл не был изменен, и не копировать его)?
Ответ Хавьера Риверы работает, но rsync проверяет и сравнивает все контрольные суммы файлов довольно долго. Я обнаружил, что использование следующей опции работает лучше для меня:
rsync -rtv --modify-window=1 /source /dest
Переключатель --modify-window=1
допускает отклонение ± 1 с на отметках времени. Если эта опция включена, сравнение временных меток будет более мягким и позволит взглянуть на незначительные различия во времени между файловыми системами NTFS / FAT и Unix.
Источник (источник): http://www.kai-hildebrandt.de/tutorials/rsync.html
PS: Учтите, что летнее время приведет к полной передаче файла дважды год. См. здесь для получения дополнительной информации и возможных решений.
Метки времени в FAT32 слишком отличаются от меток unix, чтобы полагаться на них, чтобы проверять изменения файлов, также следует использовать ключ -c, он заставит rsync сравнить все файлы, чтобы обнаружить изменения, а не полагаться на метки времени. Это будет работать, но медленнее.
Наконец, в вашей команде есть несколько параметров, которые не могут работать с файловыми системами FAT32.
Как комментарии htorque, недействительные опции не повредят вам, они просто ничего не сделают. Но вы должны добавить ключ -c.
Это:
rsync -vrc source dest
должно работать (по крайней мере, это работает на моем компьютере).
Это слишком много флагов (-vrlptgD), которые вы используете. Помните, что rsync - это утилита для Linux, которая не работает эффективно с Fat32 и NTFS.
Вам придется охотиться за трюками, чтобы иметь возможность его использовать.
Попробуйте:
rsync -rvh --size-only --progress --delete /path/to/ext4/ /path/to/fat32/
Подробнее здесь
Вам также следует избегать использования популярной опции -a. Моя рекомендация по FAT32:
rsync -vrc --delete --progress --no-p source destination
- no-p: нет разрешения
- delete: удалить несопоставленные файлы и папку в месте назначения (если вы действительно этого хотите)
[ 114] - прогресс: показать прогресс во время передачи. Это хорошо для больших файлов.
У меня была похожая проблема под OSX, и ответ Glutanamate не помог. Некоторые файлы отличаются на час; это может быть потому, что я склонен пересекать часовые пояса относительно часто. Другие файлы отключены на день или даже месяц. Я не уверен, почему это так. Контрольная сумма в некоторых файлах с сильно различающимися временными метками показывает, что они действительно идентичны.
В любом случае, похоже, что опция --size-only
, которая говорит rsync
игнорировать метки времени, будет работать для моих целей. -c
/ --checksum
(как упомянуто Хавьером) также работает, но занимает немного больше времени. Я рассчитал время, и мне потребовалось около минуты, чтобы сравнить контрольные суммы для ГБ или около того в подкаталоге, с которым я работаю. Конечно, скорость, с которой это происходит, будет зависеть от самого медленного диска в системе; в моем случае это SD-карта в моем телефоне. Однако это было после того, как я уже делал некоторые манипуляции с файлами (включая контрольные суммы), поэтому многие из файлов, возможно, уже были скопированы в кэш-память ОЗУ.