Поиск изменений в общем объекте через bash

Вот мой случай: у меня есть пакет с именем say foo-1.2.3 . Я хочу знать, какой пакет он устанавливает. Таким образом, я устанавливаю его в подходе fakeroot и составляю список всех файлов, которые он устанавливает в файле FILES

Предположим, я хочу обновить его до foo-1.2.4 . Точно так же я создал файл FILES для него. Я знаю, что если имя общей библиотеки изменяется, все пакеты, динамически связанные с ним, должны быть перекомпилированы. Поэтому я хочу написать сценарий bash, который уведомит меня.

Например, скажем, что старые FILES содержат-

 /usr/lib/libfoo.so.1 /usr/lib/libfooabc.so.1 /usr/lib/something.so.1 /usr/share/doc/foo-1.2.3/whatever 

И, скажем, новые FILES содержат-

 /usr/lib/libfoo.so.2 /usr/lib/libfooabc.so.2 /usr/lib/something.so.1 /usr/share/doc/foo-1.2.4/whatever 

Я хочу, чтобы сценарий уведомил меня, что /usr/lib/libfoo.so.1 и /usr/lib/libfooabc.so.1 изменились.

Я попробовал это

 grep -F -x -f old new|grep -E *\.so\.* 

Но это не работает, как ожидалось, когда old файл –

 /usr/lib/libfooabc.so.1 /usr/lib/libfoo.so.1 /usr/lib/libfoo.so.2 /usr/lib/something.so.1 /usr/share/doc/foo-1.2.3/whatever 

И new

 /usr/lib/libfoo.so.2 /usr/lib/libfoo.so.3 /usr/lib/libfooabc.so.2 /usr/lib/something.so.1 /usr/share/doc/foo-1.2.4/whatever 

Выход –

 /usr/lib/libfoo.so.2 /usr/lib/something.so.1 

Желаемый выход –

 /usr/lib/libfooabc.so.1 /usr/lib/libfoo.so.1 

One Solution collect form web for “Поиск изменений в общем объекте через bash”

Я придумал два варианта использования diff, которые должны работать для вас.

Используя diff -u и sed:

 diff -u old new | sed -n 's/^-\(.*\.so\..*\)/\1/p' /usr/lib/libfoo.so.1 /usr/lib/libfooabc.so.1 
  • Эта команда выводит полный diff между двумя файлами, и мы используем sed, чтобы отфильтровать только изменения из «старого» файла (обозначенные ведущим) и далее фильтровать diff, содержащий .so. , Чтобы вырезать – из выходного сигнала diff, мы используем обратную ссылку для печати всего, кроме этого.

Использование форматирования выходных данных и grep

Два варианта на одном и том же; второй – короче, они оба ведут себя одинаково друг с другом и с предыдущим примером.

 diff --old-line-format='%L' --unchanged-line-format= --new-line-format= old new | grep '\.so\.' 

или немного лучше:

 diff --changed-group-format='%<' --unchanged-line-format= old new | grep '\.so\.' 

Вы можете получить diff для выполнения задания полностью самостоятельно – он имеет фильтрацию регулярных выражений (-I игнорировать флаг), но он ведет себя странно, когда вам нужно инвертировать регулярное выражение. Мне никогда не везло с этим.

  • Linux: поиск текстового файла со строкового ввода
  • История доступа к файлу
  • сплит 60GB плоский файл с записями, иногда охватывающих несколько строк
  • Как отсортировать файл на основе раздела поля
  • Как сделать файлы неизменяемыми и неуязвимыми без `chattr`?
  • Можно ли обнаружить, когда файл был загружен?
  • Как переименовать неназванные файлы с соответствующими расширениями?
  • выводить файл журнала с некоторого времени до некоторого времени через ssh
  • Сжатие tar-файла без извлечения содержимого
  • как каталоги реализуются в файловой системе UNIX?
  • Как удалить установленные места, которые были добавлены с помощью команды mount?
  • Interesting Posts

    Вилка / Невозможно выделить память

    Как найти мусорную корзину Nautilus в файловой системе

    Получить каталог, из которого был вызван скрипт

    Как я могу получить справочное сообщение для zsh builtin's?

    Активация двойной сетевой карты controllerа Intel 82575 PCI, Ubuntu

    Как я могу разделить каталоги на разные разделы при установке OpenSUSE Leap (и других дистрибутивов Linux)?

    passwd: блокировка токена аутентификации занята

    Есть ли что-то вроде «veth», но без заголовков на уровне ссылок?

    Как я могу найти список только в каталоге?

    Что делает [? 1049h и [? 1h ANSI escape-последовательности?

    Почему файлы на подключенном smbfs-ресурсе создаются с помощью исполняемого битового набора?

    изменения в /etc/mail.rc, похоже, не вступают в силу

    Изменение размера страницы Wmctrl

    POSIX и Bash, sh shorthand, для составного оператора if

    Как заставить samba следовать символической ссылке за пределами общего пути

    Linux и Unix - лучшая ОС в мире.