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