Перезаписать файл при копировании, если содержимое из них не совпадает
У меня есть много файлов с одной стороны (A) и много других файлов в другом месте (B)
Я копирую А в Б, там много одинаковых файлов, но содержимое может быть разным!
Обычно я использовал mc (Midnight Commander) для этого и выбрал "Перезаписать, если другой размер". Но есть ситуация, когда размер одинаков, а содержание разное. В этом случае mc сохраняет файл в месте B и не перезаписывает его.
В диалоге перезаписи mc есть работа "Обновить", я не знаю, что она делает? В справке нет такой информации, может быть это решение?
Поэтому я ищу решение, которое может помочь мне скопировать все файлы из A в B и перезаписать файлы в B месте, если они существуют И содержимое отличается от A.
если файл в месте "B" существует (то же имя), а содержимое отличается, его нужно каждый раз перезаписывать файлом из места "A".
Вы знаете какое-нибудь решение?
4 ответа
Вы пробовали командную строку:
cp -ru A/* B/
Следует рекурсивно копировать все измененные файлы (более поздние временные метки) из каталога A в каталог B.
Вы также можете использовать -a
вместо -r
в командной строке, в зависимости от того, что вы хотите сделать. Увидеть cp
справочная страница.
Я бы использовал 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
для больше вариантов и деталей.
Возможно, вы захотите сохранить какой-нибудь индексный файл, содержащий хэш SHA-1 файлов, который вы создаете при их записи. Затем вы можете вычислить исходный хеш и сравнить его с целевым хешем из индексного файла. Это будет работать, только если этот процесс является единственным способом записи файлов в место назначения.
http://linux.math.tifr.res.in/manuals/man/mc.html
Диалог замены отображается, когда вы пытаетесь скопировать или переместить файл поверх существующего файла. Диалог показывает даты и размеры обоих файлов. Нажмите кнопку Yes, чтобы перезаписать файл, кнопку No, чтобы пропустить файл, кнопку alL, чтобы перезаписать все файлы, кнопку nonE, чтобы никогда не перезаписывать, и кнопку Update, чтобы перезаписать, если исходный файл новее, чем целевой файл. Вы можете прервать всю операцию, нажав кнопку Прервать