#bash #wildcard #glob
#bash #подстановочный знак #глобус
Вопрос:
белый список. Будет задан в виде массива
whitelist=(assets/**/* config/mapel-syrup/*/bla-web/**/*)
assets/**/*
config/mapel-syrup/*/bla-web/**/*
путь к файлу, который должен совпадать. Будет задан в виде массива.
paths=(config/mapel-syrup/common/bla-web/list/file1.log.json config/mapel-syrup/alpine/bla-web/file2.log.json assets/dire1/file3.json)
config/mapel-syrup/common/bla-web/list/file1.log.json
config/mapel-syrup/alpine/bla-web/file2.log.json
assets/dire1/file3.json
путь к файлу, который не должен совпадать.
config/mapel-syrup/common/not-match/file4.json
assets/mapel-syrup/makelists/aus/MakeLists.txt
Я пытаюсь реализовать функцию белого списка с помощью скрипта bash. Мне дан массив whitelist
каталогов. Вызывается второй массив paths
, который содержит все файлы, подлежащие изменению. Задача проста, проверьте, совпадают ли пути с белым списком, затем выполните echo match, иначе ничего не делайте.
Я пытался найти некоторые решения в SO, но ни одно из них не соответствует имеющимся у меня шаблонам. Может ли эксперт помочь мне с этим?
Ответ №1:
paths=(config/mapel-syrup/common/bla-web/list/file1.log.json config/mapel-syrup/alpine/bla-web/file2.log.json assets/dire1/file3.json)
whitelist=(assets/**/* config/mapel-syrup/*/bla-web/**/*)
for p in ${paths[@]}; do
echo $p
match=0
for w in ${whitelist[@]}; do
[[ $p == $w ]] amp;amp; match=1
done
if [[ $match -eq 1 ]]; then
echo matches
else
echo "no match"
fi
done
Пример вывода:
config/mapel-syrup/common/bla-web/list/file1.log.json
matches
config/mapel-syrup/alpine/bla-web/file2.log.json
no match
assets/dire1/file3.json
matches
Комментарии:
1. Вы уверены, что получаете совпадения, нет совпадений и совпадений? Я не получаю совпадений только с конфигурацией / mapel-syrup/common/bla-web/list/file1.log.json нет совпадений с конфигурацией /mapel-syrup/alpine/bla-web/file2.log.json нет совпадений с активами / dire1/file3.json нет совпадений
2. Я скопировал содержимое скрипта и выходные данные как есть из bash 4.2.46 (2) на RHEL7.8. Похоже, что редактирование triplee нарушило сценарий. Моя оригинальная версия без кавычек работает нормально. Я посмотрю, смогу ли я восстановить исходную версию.
3. @triplee: я понимаю, что вы, вероятно, хотели добавить кавычки из лучших практик. Но я предполагаю, что он ломается, потому что сценарий полагается на глобализацию пути. Я не изучал детали, но код, опубликованный изначально, работает, но не работает при добавлении кавычек.
4. Рад слышать, что это работает. Надеюсь, тогда вы примете мой ответ.