#linux #deployment #console #copying #mc
#linux #развертывание #консоль #копирование #mc
Вопрос:
У меня много файлов с одной стороны (A) и много других файлов в другом месте (B)
Я копирую A в B, там много одинаковых файлов, но содержимое может быть другим!
Обычно я использовал mc (Midnight Commander) для этого и выбирал «Перезаписать, если другой размер». Но бывает ситуация, когда размер одинаков, но содержимое отличается. В этом случае mc сохраняет файл в месте B и не перезаписывает его.
В диалоговом окне перезаписи mc есть работа «Обновление», я не знаю, что он делает? В справке нет такой информации, может быть, это решение?
Итак, я ищу решение, которое может помочь мне скопировать все файлы из A в B и перезаписать файлы в месте B, если они существуют, А содержимое отличается от A.
если файл в месте «B» существует (с тем же именем), а содержимое отличается, его нужно каждый раз перезаписывать файлом из места «A».
Знаете ли вы какое-либо решение?
Комментарии:
1. кстати, все файлы являются обычными текстовыми файлами
Ответ №1:
Я бы использовал rsync
, поскольку это не будет зависеть от даты файла, а фактически проверяет, изменилось ли содержимое файла. Например:
#> rsync -cr <directory to copy FROM> <directory to copy TO>
Rsync копирует файлы либо на удаленный хост, либо с него, либо локально на текущем хосте (он не поддерживает копирование файлов между двумя удаленными хостами).
-c, --checksum skip based on checksum, not mod-time amp; size
-r, --recursive recurse into directories
Смотрите man rsync
Дополнительные параметры и подробности.
Комментарии:
1. Ключевым моментом
-c
здесь является переключатель. Я хотел избежать изменения «измененной» временной метки и сравнивать содержимое файла, а не только временные метки. Спасибо!
Ответ №2:
Вы пробовали командную строку:
cp -ru A/* B/
Следует рекурсивно скопировать все измененные файлы (более позднюю временную метку) из каталога A в каталог B.
Вы также можете использовать -a
вместо -r
в командной строке, в зависимости от того, что вы хотите сделать. Смотрите cp
справочную страницу.
Комментарии:
1. кажется, это то, что мне нужно — u означает копировать только тогда, когда ИСХОДНЫЙ файл более новый, чем файл назначения, или когда файл назначения отсутствует, но какую временную метку он ищет? рекордное время? и на самом деле это не идеальное решение, но, возможно, на данный момент проще всего, спасибо.
Ответ №3:
Возможно, вам захочется сохранить какой-то «индексный» файл, содержащий хэш SHA-1 файлов, которые вы создаете при их записи. Затем вы можете вычислить «исходный» хэш и сравнить его с «целевым» хэшем из индексного файла. Это сработает, только если этот процесс является единственным способом записи файлов в пункт назначения.
Комментарии:
1. знаете ли вы какое-либо программное обеспечение, которое может сделать что-то подобное? 1. создайте хэш для дерева исходных файлов. 2. создайте хэш для дерева файлов назначения. 3. сравните его и скопируйте только измененные файлы. как полететь?
2. Не от руки, нет, но звучит забавно писать самостоятельно, используя библиотеку openssl 🙂
Ответ №4:
http://linux.math.tifr.res.in/manuals/man/mc.html
Диалоговое окно замены отображается при попытке скопировать или переместить файл поверх существующего файла. В диалоговом окне отображаются даты и размеры обоих файлов. Нажмите кнопку «Да», чтобы перезаписать файл, кнопку «Нет», чтобы пропустить файл, кнопку «Все», чтобы перезаписать все файлы, кнопку «Нет», чтобы никогда не перезаписывать, и кнопку «Обновить», чтобы перезаписать, если исходный файл более новый, чем целевой файл. Вы можете прервать всю операцию, нажав кнопку прерывания