Перезаписать файл при копировании, если содержимое из них не совпадает - PullRequest
15 голосов
/ 27 октября 2011

У меня много файлов с одной стороны (A) и много других файлов в другом месте (B)

Я копирую A в B, там много файлов одинаковых, но содержимое может отличаться!

Обычно я использовал для этого mc (Midnight Commander) и выбирал «Перезаписать, если другой размер».Но есть ситуация, когда размер одинаков, а содержание разное.В этом случае mc хранит файл в месте B и не перезаписывает его.

В диалоге перезаписи mc есть работа «Обновление». Я не знаю, что он делает?В справке нет такой информации, может быть, это решение?

Поэтому я ищу решение, которое может помочь мне скопировать все файлы из A в B и перезаписать файлы в месте B, если они существуют И содержимое отличаетсяиз A.

, если файл в месте «B» существует (с тем же именем) и содержимое отличается, его нужно каждый раз перезаписывать файлом из места «A».

Знаете ли вылюбое решение?

Ответы [ 4 ]

18 голосов
/ 27 октября 2011

Вы пробовали командную строку:

cp -ru A/* B/

Следует рекурсивно копировать все измененные файлы (более поздние временные метки) из каталога A в каталог B.

Вы также можете использовать -a вместо -r в командной строке, в зависимости от того, что вы хотите сделать. См. Справочную страницу cp.

12 голосов
/ 29 мая 2016

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

#> rsync -cr <directory to copy FROM> <directory to copy TO>

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

-c, --checksum    skip based on checksum, not mod-time & size
-r, --recursive   recurse into directories

Подробнее см. man rsync.

0 голосов
/ 28 апреля 2018

http://linux.math.tifr.res.in/manuals/man/mc.html

Диалоговое окно замены отображается при попытке скопировать или переместить файл поверх существующего файла.Диалог показывает даты и размеры обоих файлов.Нажмите кнопку Yes, чтобы перезаписать файл, кнопку No, чтобы пропустить файл, кнопку alL, чтобы перезаписать все файлы, кнопку nonE, чтобы никогда не перезаписывать, и кнопку Update, чтобы перезаписать, если исходный файл новее, чем целевой файл.Вы можете прервать всю операцию, нажав кнопку Прервать

0 голосов
/ 27 октября 2011

Возможно, вы захотите сохранить какой-нибудь «индексный» файл, содержащий хэш SHA-1 файлов, который вы создаете при их записи.Затем вы можете вычислить исходный хеш и сравнить его с целевым хешем из индексного файла.Это будет работать, только если этот процесс является единственным способом записи файлов в место назначения.

...