сейчас, прежде чем вы думаете, «это было сделано раньше», пожалуйста, продолжайте
Как и большинство людей, пытающихся сделать скрипт find 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, / test, / html, / icons Это доказывает, что концепцияработает, но теперь, чтобы продвинуться немного дальше, мне нужно использовать find, чтобы искать 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, а не некоторую для цикла.Любой конструктивный вклад будет оценен.