динамическое исключение файлов через сопоставление grep - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть файл source-push.sh, который возвращает список файлов, которые я хочу исключить из результатов команды поиска.

Это выглядит так:

#!/usr/bin/env bash
find . -not \( -path './node_modules' -prune \) -name '*.js' | grep -vE $(echo $(./source-push.sh | xargs -I{} echo -n "{}|") | rev | cut -b2- | rev) | xargs -L1 standard --fix
find . -not \( -path './node_modules' -prune \) -name '*.css' | grep -vE $(echo $(./source-push.sh | xargs -I{} echo -n "{}|") | rev | cut -b2- | rev) | xargs -L1 stylelint --config stylelint.json

Должен быть способ сделать работу лучше, чем эта.Есть предложения?

1 Ответ

1 голос
/ 19 апреля 2019

Вместо:

... | grep -vE $(echo $(./source-push.sh | xargs -I{} echo -n "{}|") | rev | cut -b2- | rev ) | ...

вы можете использовать опции POSIX -F и -f:

... | grep -v -F -f <( ./source-push.sh ) | ...
  • -Fсообщает grep, что шаблоны являются фиксированными строками
    • (во избежание проблемы, из-за которой исходный код будет поврежден, если шаблоны содержат символы, которые являются специальными для grep -E)
  • -f file указывает grep использовать список шаблонов из file
  • <( ... ) - это способ bash для представления вывода программы в виде файла (именованный канал)
...