Сравните крупные каталоги с отчетом о выполнении работ

Цвет в Вашем приглашении оболочки (lpeabody@webtest) прибывает из PS1 переменная оболочки:

.bashrc на Вашей Ubuntu машина установит подсказку, чтобы окрасить, если она обнаружит что Ваш $TERM xterm-color.

.bashrc на Вашем CentOS машина, кажется, не делает это.

13
11.12.2016, 15:25
4 ответа

редактирование для исправления и ясности опции - я забыл '-резюме'

diff -rs --brief "$dir1" "$dir2" 

-r, --recursive              recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief                  report only when files differ
--speed-large-files      assume large files and many scattered small changes

и добавьте другие опции являться на вкус, в зависимости от того, что Вы сравниваете:

-i, --ignore-case            ignore case differences in file contents
-b, --ignore-space-change    ignore changes in the amount of white space
-B, --ignore-blank-lines     ignore changes whose lines are all blank
--strip-trailing-cr      strip trailing carriage return on input
--ignore-file-name-case  ignore case when comparing file names

разность - RS считает каждый байт оригинала и копии, и сообщит о файлах, которые являются тем же.

Различный выходной формат определяется POSIX, таким образом, это довольно портативно. Можно хотеть добавить что-то как:

| кладите разность-out.1 для первого удара | grep-v-Ee 'Файлы.*, и.* идентичны'

Вы могли использовать chksums или хеши, но затем необходимо сохранить их sync'd с деревьями файла, таким образом, Вы вернулись бы к чтению каждого байта каждого файла так или иначе.

РЕДАКТИРОВАНИЕ - слишком долго, чтобы быть комментарием, в ответ на:

файлы более чем 10 ГБ не проверяют

Можно хотеть попробовать эту различную опцию: - большие файлы скорости

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

Я думал, что была-h опция или 'bdiff', который добился большего успеха на больших файлах, но я не могу найти один в Fedora. Я полагаю, что - опции больших файлов скорости являются преемником '-h', "нерешительного, сравнивают" опцию.

Другой подход должен был бы повторить, что rsync управляют, чтобы Вы использовали с '-vin' (подробный, перечислите, no_run). Это сообщило бы о любых различиях, которые rsync находит - и не должно быть никого.

Для перемещения некоторых файлов Вы смотрите на сценарий что-то как:

if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then 
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv  "$dir2/$path" "$target"
fi

но я не рекомендую делать это. Базовый вопрос, "как я могу быть уверен, что rsync скопировал файловую иерархию правильно?" и если можно продемонстрировать себе, что rsync работает хорошо с разностью или некоторым другим инструментом, затем можно просто полагаться на rsync, вместо того, чтобы работать вокруг этого.

rsync - vin выдержит сравнение на основе того, что другие опции Вы даете ему. Я думал, что это приняло значение по умолчанию к контрольной сумме, но Вы правы,-c или - контрольная сумма требуется для этого.

Различная утилита действительно предназначается для файлов строк текста, но это должно сообщить 'идентичный' под-s для двоичных файлов.

- резюме должно подавить любой вывод содержания файла - мои извинения за пропуск его ранее - это было полупроложено под землей в ужасном сценарии.

6
27.01.2020, 19:53
  • 1
    Есть ли способ получить его к mv каждый файл это находит к "проверенной" папке в корне диска, сохраняя полный путь? Например, если /disk1/a/b/c/file1 идентично /disk2/a/b/c/file1, затем переместите его в /disk1/verified/a/b/c/file1. Затем я мог закончить только с плохо скопированными файлами. (До сих пор много файлов, которые не проверяют более чем 10 ГБ, который страшен.) –  Dan 28.01.2014, 08:03
  • 2
    Можно хотеть попробовать эту опцию: - большие файлы скорости –  D McKeon 28.01.2014, 08:42
  • 3
    Что это делает точно? –  Dan 28.01.2014, 09:05
  • 4
    Если я работаю rsync -vin - это делает сравнение контрольной суммы или байт байтом? Я думал, что rsync только сравнил размер/дату, если Вы не добавляете -c. И от того, что я считал speed large files кажется, только имеет значение с недвоичными файлами... или я неправильно? –  Dan 28.01.2014, 09:12
  • 5
    diff дает мне результаты в форме "Files __ and ___ differ" ... и я прокручиваю это sed -e "s/Files /cp -afv /" -e "s/ and / /" -e "s/ differ$//" попытаться генерировать сценарий для перекопирования плохих файлов. Но вывод разности закрывается кавычки, таким образом, он не работает. Я могу заставить это давать мне заключенные в кавычки пути? –  Dan 28.01.2014, 19:51

Я посмотрел бы на использование своего рода приложения хеша для проверки целостности данных. Я знаю, что много утилит открытия дубликата файла используют хеши для идентификации duplicate/non-duplicates. Кажется мне, что это - расследование, которое могло бы стоить.

0
27.01.2020, 19:53

Можно использовать rdiff-резервное-копирование для этого. Установите его на обоих серверах, и это будет делать умные сравнения контрольных сумм и синхронизировать то, что еще не там.

0
27.01.2020, 19:53

Вот diff с отчетом о прогрессе на основе количества файлов:

diff -rqs dir1 dir2 | pv -l -s filecount > logfile

Вам понадобится pv (pipe viewer): http://www.ivarch.com/programs/pv.shtml

Объяснение:

  • diff -r рекурсивно сравнивает каталог и подкаталоги.
  • diff -q печатать только имена файлов, которые отличаются. не печатать фактические различия.
  • diff -s печатать также имена файлов, которые не отличаются. это важно для информации о ходе выполнения.
  • pv -l сообщать о ходе работы на основе количества строк.
  • pv -s count оценить время до завершения на основе количества строк.
  • Перенаправление на logfile предназначено для красивого вывода. Иначе вывод из diff будет смешиваться со строкой состояния из pv.

для получения количества файлов используйте следующую команду:

find dir1 -type f | wc -l

Фильтруйте лог-файл для файлов, которые отличаются:

grep -v "^Files .* identical$" logfile

Эта вариация будет выводить файлы, которые отличаются в реальном времени, одновременно записывая все в logfile:

diff -rqs dir1 dir2 | pv -l -s filecount | 
    tee logfile | grep -v "^Files .* identical$"

В качестве альтернативы вы можете записывать только файлы, которые отличаются:

diff -rqs dir1 dir2 | pv -l -s filecount | 
    grep -v "^Files .* identical$" > logfile

Примечание: вышеуказанные команды будут сообщать о прогрессе на основе количества файлов. Это работает лучше всего, если есть много маленьких файлов. Если у вас есть несколько огромных файлов, это не принесет вам большого удовольствия.

К сожалению, я не знаю простого способа сообщать о прогрессе, основанном на сравнении байтов.


Если вы можете найти покой, просто сравнивая метаданные (а не фактическое содержимое файлов), то вы можете использовать rsync. Это будет значительно быстрее.

Подробнее:

4
27.01.2020, 19:53

Теги

Похожие вопросы