Как найти файлы, которые не содержат заданный шаблон строки?

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

Итак, вот как я это делаю. Это обычно для проектов nodejs, но я думаю, что он работает и для других фреймворков и языков.

Что я делаю, это создать каталог configs в корне проекта, а в этом каталоге хранить несколько файлов для всех сред (а иногда и отдельных файлов для среды каждого разработчика), которые отслеживаются в контроле источника. И есть фактический файл, который код использует named config в корне проекта. Это единственный файл, который не отслеживается. Таким образом, это выглядит так

root
|
|- config (not tracked)
|
|- configs/ (all tracked)
    |- development
    |- staging
    |- live
    |- James

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

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

Этот поток может быть сначала немного сложным, но он имеет большие преимущества: 1. Вам никогда не придется беспокоиться о том, что файл конфигурации удаляется или изменяется на сервере без резервного копирования 2. То же самое, если у разработчика есть некоторая настраиваемая конфигурация на его машине, и его машина перестает работать по какой-либо причине. 3. Перед любым развертыванием вы можете различать файлы конфигурации для development и staging, например и посмотреть, нет ли чего-то, что не хватает или сломано.

463
задан nbro 7 March 2018 в 13:18
поделиться

6 ответов

Следующая команда дает мне все файлы, которые не содержат шаблон foo :

find .  -not  -ipath '.*svn*' -exec  grep  -H -E -o -c  "foo"  {} \; | grep 0
16
ответ дан 22 November 2019 в 22:39
поделиться

другая альтернатива, когда grep не имеет-L опции (IBM AIX, например), с только grep и оболочка:

for file in * ; do grep -q 'my_pattern' $file || echo $file ; done
0
ответ дан 22 November 2019 в 22:39
поделиться

Если ваш grep имеет параметр -L (или - файлы без совпадений )):

$ grep -L "foo" *
769
ответ дан 22 November 2019 в 22:39
поделиться

I had good luck with

grep -H -E -o -c "foo" */*/*.ext | grep ext:0

My attempts with grep -v just gave me all the lines without "foo".

6
ответ дан 22 November 2019 в 22:39
поделиться

Вам действительно понадобится:

find .  -not  -ipath '.*svn*' -exec  grep  -H -E -o -c  "foo"  {} \; | grep :0\$
9
ответ дан 22 November 2019 в 22:39
поделиться

Взгляните на ack . Он автоматически выполняет исключение .svn , предоставляет регулярные выражения Perl и представляет собой простую загрузку одной программы Perl.

Эквивалент того, что вы ищете, должен быть в ack :

ack -L foo
44
ответ дан 22 November 2019 в 22:39
поделиться
Другие вопросы по тегам:

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