сейчас, прежде чем вы думаете, «это было сделано раньше», пожалуйста, прочитайте.Поиск каталогов с поиском в bash с использованием списка исключений
Как и большинство людей, пытающихся выполнить сценарий поиска bash, вы в конечном итоге жестко кодируете сценарий одной команде, но в конечном итоге редактируете эту вещь в течение следующих месяцев/лет, так часто, что вы хотите в конце вы сделали это правильно в первый раз.
Я пишу небольшую резервную программу прямо сейчас, чтобы делать резервные копии каталогов и вам нужно их найти, против списка директив, который должен быть исключен. Легче сказать, чем сделать. Позвольте мне задать этап:
#!/bin/bash
BasePath="/home/adesso/baldar"
declare -a Iggy
Iggy=("/cgi-bin"
"/tmp"
"/test"
"/html"
"/icons")
IggySubdomains=$(printf ",%s" "${Iggy[@]}")
IggySubdomains=${IggySubdomains:1}
echo $IggySubdomains
exit 0
Теперь в конце этого вы получите /CGI-BIN,/TMP,/тест,/HTML,/значки Это доказывает, что концепция работает, но теперь принять его немного дальше, мне нужно использовать поиск искать BasePath и поиск только один уровень для всех подкаталогов и исключить список подкаталогов в массиве ...
Если я печатаю это вручную было бы :
find /var/www/* \(-path '*/cgi-bin' -o -path '*/tmp' -o -path '*/test' -o -path '*/html' -o -path '*/icons' \) -prune -type d
И, может быть, мне захочется зациклиться на каждом подкаталоге и сделать то же самое ... Надеюсь, вы поняли мою мысль.
Итак, что я пытаюсь сделать, кажется возможным, но у меня есть небольшая проблема, printf ",% s" мне не нравится, используя все эти параметры find -path или -o. Означает ли это, что я должен снова использовать eval?
Я пытаюсь использовать силу bash здесь, а не некоторый цикл. Любой конструктивный вклад будет оценен.
Вам не нужно 'declare -a', присваивания достаточно. Имена переменных в bash обычно строчные (или все шапки для переменных среды), а не верблюд.Нет необходимости «выходить 0» в конце ('echo' вернет 0 anayway). – Sorpigal
CamelCase просто делает материал легким для чтения и привычным для меня я вроде как, я предполагаю, что он ничего не сломает ... но спасибо за другие советы, я действительно начинаю любить сообщество здесь. : D –
Yup, CamelCase в порядке; единственное место, где неправильные имена переменных приводят к ошибкам, - это использование ALL_CAPS для вещей, которые не являются переменными среды или встроенными (поскольку это приводит к конфликтам с переменными, которые _are_ в одном из этих классов). –