Использование подстановочного знака для соответствия пути к файлу 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, который содержит все файлы, которые нужно изменить. Задача проста, проверьте, совпадают ли пути с белым списком, затем выполните эхо-совпадение, иначе ничего не делать.

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


person slowbone    schedule 04.11.2020    source источник


Ответы (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 ]] && 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
person Bram    schedule 04.11.2020
comment
Вы уверены, что получаете совпадения, а не совпадения и совпадения? У меня нет совпадений config / mapel-syrup / common / bla-web / list / file1.log.json нет совпадений config / mapel-syrup / alpine / bla-web / file2.log.json нет совпадений assets / dire1 / file3.json нет совпадения - person slowbone; 04.11.2020
comment
Я скопировал содержимое скрипта и вывод, как из bash 4.2.46 (2) на RHEL7.8. Похоже, что редактирование Трипли сломало сценарий. Моя оригинальная версия без кавычек работает нормально. Посмотрю, смогу ли восстановить исходную версию. - person Bram; 04.11.2020
comment
@triplee: я понимаю, что вы, вероятно, хотели добавить цитаты из лучших практик. Но я предполагаю, что это не работает, потому что сценарий полагается на подстановку пути. Я не вдавался в подробности, но изначально опубликованный код работает, но не работает при добавлении кавычек. - person Bram; 04.11.2020
comment
Рад слышать, что это работает. Надеюсь, тогда ты примешь мой ответ. - person Bram; 04.11.2020