Можно ли упростить команду mkdir с помощью дальнейшего расширения bash?

Можно ли упростить команду mkdir с помощью дальнейшего расширения bash?

У меня есть команда для генерации следующей необходимой мне структуры каталогов:

./sites
./sites/domain_co_uk
./sites/domain_co_uk/php
./sites/domain_co_uk/cgi
./sites/domain_net
./sites/domain_net/cgi
./sites/domain_com

Команда, которая это создает:

mkdir -p sites/{domain_com,domain_co_uk/{cgi,php},domain_net/cgi}

Мне интересно, смогу ли я вложить это в дополнительные скобки так, чтобыдомен_иcgiне повторяются в команде? Я поигрался, и это не показалось возможным, мне удалось изменить это так, что оба_co_ukи_сетьбыли каталоги cgi и php, но мне не нужен каталог php в _net.

Читая страницу руководства bash, я заметил, что расширение имени пути происходит после расширения фигурных скобок, поэтому я задался вопросом, не упустил ли я что-то, что позволило бы мне упростить команду.

Я рад, что моя команда делает то, что нужно, это скорее ситуация расширения знаний.

решение1

В вашей команде нет расширения имени пути.

Вы можете избегать повторения одного или другого, но не обоих одновременно –пока не2-е расширение можно сделать идентичным для всех доменов, расширенных первым. Расширения перечисляют все возможные комбинации, например, {a,b,c}{1,2,3}всегда будут расширяться до строк 3×3 (a1, a2, a3, b1, ...), и вы не можете заставить его исключить нежелательное значение.

Итак, если бы оба домена имели "cgi"иПодкаталоги "php" можно использовать:

mkdir -p sites/{domain_com,domain_{co_uk,net}/{cgi,php}}

Обратите внимание, что расширение скобок не заботится о том, во что оно расширяется, и не обязательно должно использоваться только на границах. Ваш исходный пример можно переписать так:

mkdir -p sites/domain_{co_uk/{php,cgi},net/cgi,com}

или перевернуть наоборот (чтобы не повторять «cgi»):

mkdir -p sites/domain_{co_uk/php,{co_uk,net}/cgi,com}

В целом, однако, этоне упрощаеткоманда (возможно, только в математическом смысле) – это толькоукорачиваеткоманда, но на самом деле она становится более сложной для понимания. Вот лучшая версия:

mkdir -p sites/domain_com
mkdir -p sites/domain_co_uk/{php,cgi}
mkdir -p sites/domain_net/cgi

Связанный контент