Шаблон пути ripgrep

Как уже упоминалось , / usr / local , по сути, является префиксом для программного обеспечения, установленного системным администратором, а / usr должно быть используется для программного обеспечения, устанавливаемого из пакетов дистрибутива.

Идея заключается в том, чтобы избежать конфликтов с распределенным программным обеспечением (например, rpm и deb ] пакетами) и дать администратору полную власть над «локальным» префиксом.

Это означает, что администратор может устанавливать скомпилированное программное обеспечение, продолжая использовать такой дистрибутив, как debian.

Из FHS

Программное обеспечение, размещенное в / или / usr, может быть перезаписано при обновлении системы (хотя мы рекомендуем, чтобы в этих обстоятельствах дистрибутивы не перезаписывали данные в / etc). По этой причине локальное программное обеспечение нельзя размещать за пределами / usr / local без уважительной причины.

При установке пользовательского программного обеспечения пользователь предлагает использовать $ HOME в качестве префикса, поскольку это гарантирует, что у вас есть права на запись. Лично я считаю использование $ HOME / .local более элегантным решением, поскольку оно позволяет избежать загромождения вашего (надеюсь) красивого и аккуратного домашнего каталога!

$ HOME / .local / share уже используется в спецификации freedesktop.org XDG Base Directory , поэтому нетрудно представить себе добавление $ HOME /. local / bin в ваш $ PATH и создайте $ HOME / .local / lib и т. д., пока вы на нем.

Если вы действительно не хотите, чтобы ваш префикс был скрытым каталогом, вы также можете легко создать на него символическую ссылку, e.g:

ln -s .local ~/local

Sidenote

Стоит отметить, что .config (а не .local / etc ) является значением по умолчанию для $ XDG_CONFIG_HOME , используемого для пользовательские файлы конфигурации. Я также должен отметить, что, к сожалению, большая часть программного обеспечения игнорирует XDG и создает файлы конфигурации где угодно (обычно в корне $ HOME ). Также обратите внимание, что $ XDG_CONFIG_HOME может быть отключен, если требуется значение по умолчанию $ HOME / .config .

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

0
26.02.2019, 18:41
2 ответа

Используйте флаг -g/--glob, как описано в руководстве . Он использует подстановку вместо регулярных выражений, но на практике выполняет то же самое. Например:

rg PM_RESUME -g '*.h'

находит вхождения PM_RESUMEтолько в заголовочных файлах C при проверке ядра Linux.

ripgrep не позволяет использовать регулярное выражение для сопоставления путей к файлам. Вместо этого вы должны использовать xargs, если вам абсолютно необходимо использовать регулярное выражение:

rg --files -0 | rg '.*\.h$' --null-data | xargs -0 rg PM_RESUME

Разрушение:

  • rg --files -0выводит на стандартный вывод все файлы, которые он будет искать, с разделителями NUL.
  • rg '.*\.h$' --null-dataсоответствует только строкам из списка файлов, которые заканчиваются на .h. --null-dataгарантирует, что мы сохраним наши NULбайт.
  • xargs -0 rg PM_RESUMEразбивает аргументы с разделителями NULи передает их ripgrep, что точно соответствует списку файлов, соответствующих вашему исходному регулярному выражению.

Обработка NULбайт необходима для полной корректности. Если у вас нет пробелов в путях к файлам, то команда проще:

rg --files | rg '.*\.h$' | xargs rg PM_RESUME
8
28.01.2020, 02:40

Вы можете использовать fd:

$ fd -p REGEX | xargs rg PATTERN
0
15.01.2021, 12:04

Теги

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