#!/bin/bash
file="$1"
p="NODE-BB-4|NODE-AA-1|DUMMY"
patterns=${p//|/ }
fileMatchesAllNames () {
file=$1
if [[ $# -eq 1 ]]
then
echo "$file"
else
shift
pattern=$1
shift
grep -q "$pattern" "$file" && fileMatchesAllNames "$file" $@
fi
}
test -f "$file" && fileMatchesAllNames "$file" $patterns
Функция вызывается с набором шаблонов для поиска, берет первый, если он есть, проверяет его и удаляет с помощью shift
для следующего вызова.
grep -q
с нетерпением возвращается, как только находит совпадение (подразумевает -m1).
Если файл соответствует всем шаблонам, его имя печатается. В противном случае программа автоматически завершает работу, как только шаблон не может быть сопоставлен.
Он изменен с прежнего решения на вопрос SO, где список файлов должен быть проверен и может быть немного сокращен, поскольку имя файла не нужно передавать функции снова и снова.
#! / Bin / Баш
file="$1"
p="NODE-BB-4|NODE-AA-1|DUMMY"
patterns=${p//|/ }
fileMatchesAllNames () {
if [[ $# -eq 0 ]]
then
echo "$file"
else
pattern=$1
shift
grep -q "$pattern" "$file" && fileMatchesAllNames $@
fi
}
test -f "$file" && fileMatchesAllNames $patterns
Обратите внимание, что для работы скрипта в шаблонах не должно быть пробелов.