Как сравнить и найти отличия всех файлов в одинаковых каталогах?

Довольно тривиальная задача по сравнению всех или некоторых файлов из разных каталогов, встречается весьма часто. Но вот уже в который раз я сталкиваюсь с тем, что для некоторых людей она становится настоящим камнем преткновения. Иной раз можно услышать и весьма оригинальные идеи, например идею сравнивать даты файлов, размер и даже хэш суммы. Не спорю, в некоторых случаях эти методы могут оказать неоцениму помощь. Но случается так, что нужно сравнить несколько версий файлов, созданных в одно время, в этом случае, самый доступный (потому-что доступен через графический интерфейс) метод -  сравнения дат, не сработает. Если же случалась замена одного и того же количества символов в сравниваемых файлах то и метод определения разницы размера файлов так же не сработает. Что же, остаётся весьма надёжный метод сравнения хэш сумм, но представьте, что сравниваемые файлы имеют длинну в несколько тысяч строк, а искомое различие составляет лишь несколько символов.  Факт знания чтого что файлы различны, даст нам направления поиска, но отыскать сами различия будет также просто, как отыскать иголку в стоге сена. А ведь между тем, ничего придумывать и не надо! Всё давным давно изобретено, знакомьтесь - команда diff !

Вот несколько очень типичных примеров её использования:

Пример 1:

Простое построчное сравнение двух файлов, узнаём чем они отличаются:

$ diff file1 file2

Пример 2:

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

Решение очень простое:

$ diff -r var/www/site/somesite.ru /var/www/testsite/somesite.ru

Здесь мы использовали дополнительный ключ “-r“, который задаёт рекурсивность для папок, т.е. находя папку, команда diff перходит в неё и просматривает содержащиеся там файлы. Находя файлы с одинаковыми именами и относительными путями в обеих папках, diff сравнивает содержимое файлов.

Пример 3:

Необходимо сравнить все файлы в одинаковых каталогах (как в примере 2), но в этот раз мы хотим избежать того, чтобы diff сравнивала наши гигансткие, многомегабайтные логи webstat, так-как сравнение логов может сильно загромоздить вывод, ненужным массивом данных.

Вот решение:

$ diff -r -x webstat var/www/site/somesite.ru /var/www/testsite/somesite.ru

Используя ключ “-x” мы исключаем из поиска файлы (папки) совпадающие с указанным нами именем - webstat. Найдя такой файл или папку, diff игнорирует их, а мы получаем удобочитаемые вывод команды, незагромажденный лишними данными. Не стоит забывать и о том, что вывод diff, обычно, удобнее направлять в файл, где с данными будет работать намного удобнее:

$ diff -r -x webstat var/www/site/somesite.ru /var/www/testsite/somesite.ru > my_result_file.txt

Ну и напоследок! Не забывайте читать хелпы и маны:

$ diff –help
$ man diff

Как засунуть сертификат Webmoney в Firefox

Посвящается всем тормозам саппорта вэбмани и не менее удачливым разработчикам их вэб-интерфейса.

В общем, тех. поддержка в вебмани.. отдельный разговор, хуже только их юзабилити и кодеры интерфейса. Случилось так, что когда мой сертификат подходил к концу, я попытался его обновить, но что-то пошло не так и я остался без нового сертификата, зато с записью в вэб аккаунте, буд-то все-таки этот сертификат мною получен. Соответственно возможности “переполучить” его в “чудо” сервисе не предусмотренно.. Писал в сапорт, но там, видимо, народ напрочь укуренный, потому как ответили мне только через неделю, а к этому моменту мой имеющейся сертификат уже закончил своё выступление. Ну и так далее: письма без ответа, телефонные переговоры сводившиеся к - “пишите в сапорт, только там могут помочь, а мы просто так автоответчиками работаем…” и т.д. Короче несколько дней назад прислали мне таки сертификат, но в таком формате, что для того чтобы его запулить в браузер пришлось долго и нудно побегать с бубном..

Вот собственно этот танец с бубном здесь и выкладываю на позор кодеров и разработчиков интерфейса light.webmoney.ru, и в помощь тем кто наступит на подобные грабли:

Для начала, при получении сертификата через вэб-интерфейс light.webmoney.ru, очень важно не покупаться на то, что предлагают сделать “следующим действием”, когда нужно сохранить/сертификат, нажав на кнопку типа - “далее” или “получить”, точно уже не помню её название. В этот момент, нужно, правой кнопкой мыши, выбрать ссылку на этот сертификат и сохранить данный объект где-нибудь на своём компьютере (ну как, уже интересно? дальше круче.. наберитесь терпения!). Если вы этого не сделали и сертификат не получили, то возможности получить его заново, Вам не предоставят! Приготовьтесь к переписке с сапортом и долгому ожиданию ответов на свои письма, в моём случае, первый ответ пришёл через пол месяца, а второй не пришёл вовсе..

Ладно, будем считать, что сертификат Вы все-таки получили, но вот незадача, он получен в формате XXXXXXXXXXXX.cer , который не поддерживается в Firefox. Почему один из самых популярных браузеров игнорируется разработчиками light.webmoney.ru, вопрос открытый, можно сказать это даже не вопрос, а притензия, пусть пока ещё и не полученная из ФАС (федеральной антимонопольной службы). Если очень долго покопаться в дебрях сайта light.webmoney.ru, где как обычно, об удобной навигации для пользователей, подумать просто забыли, то можно выйти на страницу с весьма запутанной инструкцией . По идее, там описан способ добавления сертификата webmoney в браузер Firefox, но как видно, без бубна, в виде установки доп. библиотек и утилит не обходится.. Жесть! В общем, с первого раза, я и не разобрался, перечитывать пришлось не раз. В конце концов, для решения проблемы установки сертификата в формате *.cer в Firefox, нужно сделать следующее:

1) Устанавливаем библиотеку libnss3-tools:

$ sudo apt-get install libnss3-tools

2) Переходим в папку хранятся настройки профиля пользователя Firefox:

$ cd /home/юзер/.mozilla/firefox/набор_знаков.юзер(или defoult)

3) Создём временную директорию tempdir:

$ mkdir tempdir

4) Копируем в неё три фала из профиля:

$ cp cert8.db key3.db secmod.db tempdir/

5) Создаём удобоваримый для Firefox сертификат, на основе существующего:

$ certutil -A -n mynewsertificat -t “u,u,u” -d tempdir/ -i /путь_к_сертификату/XXXXXXXXXXXX.cer

6) Сделаем папку, куда сохраним старые файлы, на всякий случай…:

$ mkdir oldsertificat

7) Переносим эти фалы (бэкапим):

$ mv cert8.db key3.db secmod.db oldsertificat/

8) Копируем, полученные в результате обработки файлы, из tempdir директорию, где хранятся настройки профиля:

$ cp tempdir/* ./

9) Удаляем временную директорию tempdir:

$ rm -rf tempdir/

Теперь всё должно работать, запускаем Firefox, пользуемся.

Всё…