
필요한 다음 디렉터리 구조를 생성하는 명령이 있습니다.
./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 디렉토리가 모두 있지만 _net에 php 디렉토리를 원하지 않습니다.
Bash 맨페이지를 읽을 때 중괄호 확장 후에 경로 이름 확장이 발생한다는 것을 알았으므로 명령을 단순화할 수 있는 내용을 놓친 것은 아닐까 하는 생각이 들었습니다.
내가 가지고 있는 명령이 필요한 작업을 수행하게 되어 기쁩니다. 이는 지식 확장 상황에 가깝습니다.
답변1
명령에는 경로 이름 확장이 없습니다.
둘 중 하나를 반복하는 것은 피할 수 있지만 둘 다 반복할 수는 없습니다.~하지 않는 한두 번째 확장은 첫 번째 확장에 의해 확장된 모든 도메인에 대해 동일하게 이루어질 수 있습니다. 확장은 가능한 모든 조합을 열거합니다. 예를 들어 {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