Я нахожу несколько ответов на вопрос, поэтому хотел спросить людей, которые на самом деле его используют, а не просто сделать самый большой блог, заполнив беспорядочную бесполезную информацию.
Сценарий: Я rsync -av --progress /dir/a /dir/b, и он делает свое дело.
Я добавляю новые файлы в / dir / a и снова запускаю ту же команду, она знает, что она сделала, и только копирует новые файлы.
Я добавляю новые файлы в / dir / a и переименовываю некоторые файлы в / dir / b и, возможно, также удаляю несколько.
Если я снова запустил rsync -av --progress /dir/a /dir/b, что будет скопировать? Просто новые файлы, потому что он знает, что он ранее скопировал, или файлы, которые были переименованы / удалены тоже, потому что они больше не присутствуют.
И в качестве бонуса, если скопированные ранее файлы скопированы Опять же, есть ли способ предотвратить это, так что копируются только новые дополнения к / dir / a?
На данный момент я счастлив проверять вещи вручную, но по мере увеличения данных мне понадобится больше автоматизации для выполнения этой задачи.
Нет, он не знает, что он сделал в предыдущем запуске. Он сравнивает данные на принимающей стороне с данными для отправки. С небольшими достаточно данными это не будет очевидным, но когда у вас достаточно достаточно каталогов, время, затраченное на сравнение до начала копирования, легко ощущается.
Проверка по умолчанию - это время и размеры файлов , Из man rsync:
-c, --checksum
This changes the way rsync checks if the files have been changed
and are in need of a transfer. Without this option, rsync uses
a "quick check" that (by default) checks if each file’s size and
time of last modification match between the sender and receiver.
This option changes this to compare a 128-bit checksum for each
file that has a matching size. Generating the checksums means
that both sides will expend a lot of disk I/O reading all the
data in the files in the transfer (and this is prior to any
reading that will be done to transfer changed files), so this
can slow things down significantly.
И:
-u, --update
This forces rsync to skip any files which exist on the
destination and have a modified time that is newer than the
source file. (If an existing destination file has a
modification time equal to the source file’s, it will be updated
if the sizes are different.)
Обратите внимание, что они не подразумеваются с помощью опций, которые вы использовали. -a:
-a, --archive archive mode; same as -rlptgoD (no -H)
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve times
Нет, он не знает, что он сделал в предыдущем запуске. Он сравнивает данные на принимающей стороне с данными для отправки. С небольшими достаточно данными это не будет очевидным, но когда у вас достаточно достаточно каталогов, время, затраченное на сравнение до начала копирования, легко ощущается.
Проверка по умолчанию - это время и размеры файлов , Из man rsync:
-c, --checksum
This changes the way rsync checks if the files have been changed
and are in need of a transfer. Without this option, rsync uses
a "quick check" that (by default) checks if each file’s size and
time of last modification match between the sender and receiver.
This option changes this to compare a 128-bit checksum for each
file that has a matching size. Generating the checksums means
that both sides will expend a lot of disk I/O reading all the
data in the files in the transfer (and this is prior to any
reading that will be done to transfer changed files), so this
can slow things down significantly.
И:
-u, --update
This forces rsync to skip any files which exist on the
destination and have a modified time that is newer than the
source file. (If an existing destination file has a
modification time equal to the source file’s, it will be updated
if the sizes are different.)
Обратите внимание, что они не подразумеваются с помощью опций, которые вы использовали. -a:
-a, --archive archive mode; same as -rlptgoD (no -H)
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve times
Нет, он не знает, что он сделал в предыдущем запуске. Он сравнивает данные на принимающей стороне с данными для отправки. С небольшими достаточно данными это не будет очевидным, но когда у вас достаточно достаточно каталогов, время, затраченное на сравнение до начала копирования, легко ощущается.
Проверка по умолчанию - это время и размеры файлов , Из man rsync:
-c, --checksum
This changes the way rsync checks if the files have been changed
and are in need of a transfer. Without this option, rsync uses
a "quick check" that (by default) checks if each file’s size and
time of last modification match between the sender and receiver.
This option changes this to compare a 128-bit checksum for each
file that has a matching size. Generating the checksums means
that both sides will expend a lot of disk I/O reading all the
data in the files in the transfer (and this is prior to any
reading that will be done to transfer changed files), so this
can slow things down significantly.
И:
-u, --update
This forces rsync to skip any files which exist on the
destination and have a modified time that is newer than the
source file. (If an existing destination file has a
modification time equal to the source file’s, it will be updated
if the sizes are different.)
Обратите внимание, что они не подразумеваются с помощью опций, которые вы использовали. -a:
-a, --archive archive mode; same as -rlptgoD (no -H)
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve times
Если я правильно понял, rsync -av не имеет памяти, поэтому он будет копировать файлы, которые были переименованы / удалены тоже, потому что они присутствуют в источнике, но больше не присутствуют в целевом .
rsync -av --progress dir/a/ dir/b
и rsync -av --progress dir/a dir/b
, которая описана в руководстве man rsync. Ваш специальный случай (добавление файла в исходный каталог «a» и удаление файла из целевого каталога «b») добавит как добавленный файл, так и ранее скопированный файл, потому что он все еще находится в исходной папке. Это произойдет как с опцией -u, так и без нее, и я не знаю какой-либо опции в rsync, чтобы легко ее исправить, если вы хотите сохранить ее в исходной папке.
Но вы можете удалить его из исходного каталога или поместить имя файла в файл excluded и использовать опцию --exclude-from=excluded (для многих файлов) или просто --exclude=PATTERN для одного или нескольких файлов .
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2
sent 103 bytes received 25 bytes 256.00 bytes/sec
total size is 13 speedup is 0.10 (DRY RUN)
$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
6 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3)
file-2
7 100% 6.84kB/s 0:00:00 (xfr#2, to-chk=0/3)
sent 196 bytes received 57 bytes 506.00 bytes/sec
total size is 13 speedup is 0.05
$ echo textx-3>./dir/a/file-3
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3
sent 121 bytes received 22 bytes 286.00 bytes/sec
total size is 21 speedup is 0.15 (DRY RUN)
$ rm dir/b/file-1
rm: ta bort normal fil 'dir/b/file-1'? y
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3
sent 124 bytes received 25 bytes 298.00 bytes/sec
total size is 21 speedup is 0.14 (DRY RUN)
$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3
sent 124 bytes received 25 bytes 298.00 bytes/sec
total size is 21 speedup is 0.14 (DRY RUN)
$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3
sent 104 bytes received 22 bytes 252.00 bytes/sec
total size is 15 speedup is 0.12 (DRY RUN)
Вы можете протестировать инструмент unison, который является инструментом синхронизации. Он предоставляет визуальный метод для выявления особых случаев и решения, что делать. Существует версия GUI (unison-gtk).
Он копирует только новые файлы в / dir / a. Все, что вы делаете в / dir / b, будет проигнорировано, если вы не используете параметр --delete. В этом случае переименованные файлы в / dir / b будут удалены. Это заставит / dir / b стать точно так же, как /dir/a.
О бонусе, вы имеете в виду, например, в случае переименования файлов в / dir / a, а затем rsyncing to / dir / б? Я не думаю, что есть способ предотвратить повторное копирование файлов rsync.
Он копирует только новые файлы в / dir / a. Все, что вы делаете в / dir / b, будет проигнорировано, если вы не используете параметр --delete. В этом случае переименованные файлы в / dir / b будут удалены. Это заставит / dir / b стать точно так же, как /dir/a.
О бонусе, вы имеете в виду, например, в случае переименования файлов в / dir / a, а затем rsyncing to / dir / б? Я не думаю, что есть способ предотвратить повторное копирование файлов rsync.
Если я правильно понял, rsync -av не имеет памяти, поэтому он будет копировать файлы, которые были переименованы / удалены тоже, потому что они присутствуют в источнике, но больше не присутствуют в целевом .
rsync -av --progress dir/a/ dir/b
и rsync -av --progress dir/a dir/b
, которая описана в руководстве man rsync. Ваш специальный случай (добавление файла в исходный каталог «a» и удаление файла из целевого каталога «b») добавит как добавленный файл, так и ранее скопированный файл, потому что он все еще находится в исходной папке. Это произойдет как с опцией -u, так и без нее, и я не знаю какой-либо опции в rsync, чтобы легко ее исправить, если вы хотите сохранить ее в исходной папке.
Но вы можете удалить его из исходного каталога или поместить имя файла в файл excluded и использовать опцию --exclude-from=excluded (для многих файлов) или просто --exclude=PATTERN для одного или нескольких файлов .
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2
sent 103 bytes received 25 bytes 256.00 bytes/sec
total size is 13 speedup is 0.10 (DRY RUN)
$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
6 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3)
file-2
7 100% 6.84kB/s 0:00:00 (xfr#2, to-chk=0/3)
sent 196 bytes received 57 bytes 506.00 bytes/sec
total size is 13 speedup is 0.05
$ echo textx-3>./dir/a/file-3
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3
sent 121 bytes received 22 bytes 286.00 bytes/sec
total size is 21 speedup is 0.15 (DRY RUN)
$ rm dir/b/file-1
rm: ta bort normal fil 'dir/b/file-1'? y
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3
sent 124 bytes received 25 bytes 298.00 bytes/sec
total size is 21 speedup is 0.14 (DRY RUN)
$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3
sent 124 bytes received 25 bytes 298.00 bytes/sec
total size is 21 speedup is 0.14 (DRY RUN)
$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3
sent 104 bytes received 22 bytes 252.00 bytes/sec
total size is 15 speedup is 0.12 (DRY RUN)
Вы можете протестировать инструмент unison, который является инструментом синхронизации. Он предоставляет визуальный метод для выявления особых случаев и решения, что делать. Существует версия GUI (unison-gtk).
Он копирует только новые файлы в / dir / a. Все, что вы делаете в / dir / b, будет проигнорировано, если вы не используете параметр --delete. В этом случае переименованные файлы в / dir / b будут удалены. Это заставит / dir / b стать точно так же, как /dir/a.
О бонусе, вы имеете в виду, например, в случае переименования файлов в / dir / a, а затем rsyncing to / dir / б? Я не думаю, что есть способ предотвратить повторное копирование файлов rsync.
Если я правильно понял, rsync -av не имеет памяти, поэтому он будет копировать файлы, которые были переименованы / удалены тоже, потому что они присутствуют в источнике, но больше не присутствуют в целевом .
rsync -av --progress dir/a/ dir/b
и rsync -av --progress dir/a dir/b
, которая описана в руководстве man rsync. Ваш специальный случай (добавление файла в исходный каталог «a» и удаление файла из целевого каталога «b») добавит как добавленный файл, так и ранее скопированный файл, потому что он все еще находится в исходной папке. Это произойдет как с опцией -u, так и без нее, и я не знаю какой-либо опции в rsync, чтобы легко ее исправить, если вы хотите сохранить ее в исходной папке.
Но вы можете удалить его из исходного каталога или поместить имя файла в файл excluded и использовать опцию --exclude-from=excluded (для многих файлов) или просто --exclude=PATTERN для одного или нескольких файлов .
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2
sent 103 bytes received 25 bytes 256.00 bytes/sec
total size is 13 speedup is 0.10 (DRY RUN)
$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
6 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3)
file-2
7 100% 6.84kB/s 0:00:00 (xfr#2, to-chk=0/3)
sent 196 bytes received 57 bytes 506.00 bytes/sec
total size is 13 speedup is 0.05
$ echo textx-3>./dir/a/file-3
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3
sent 121 bytes received 22 bytes 286.00 bytes/sec
total size is 21 speedup is 0.15 (DRY RUN)
$ rm dir/b/file-1
rm: ta bort normal fil 'dir/b/file-1'? y
$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3
sent 124 bytes received 25 bytes 298.00 bytes/sec
total size is 21 speedup is 0.14 (DRY RUN)
$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3
sent 124 bytes received 25 bytes 298.00 bytes/sec
total size is 21 speedup is 0.14 (DRY RUN)
$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3
sent 104 bytes received 22 bytes 252.00 bytes/sec
total size is 15 speedup is 0.12 (DRY RUN)
Вы можете протестировать инструмент unison, который является инструментом синхронизации. Он предоставляет визуальный метод для выявления особых случаев и решения, что делать. Существует версия GUI (unison-gtk).