중첩된(예: yaml) 디렉터리 구조에서 전체 경로 생성

중첩된(예: yaml) 디렉터리 구조에서 전체 경로 생성

(추가 구현을 위해) yaml 디렉터리 구조를 전체 경로로 변환하기 위해 shell/bash에 스크립트를 작성해 보았습니다 mkdir -p. Yaml은 사람이 편집할 수 있기 때문에 제가 선택한 것입니다. 예제 구조는 다음과 같습니다.

- Downloads
    - Music
    - Movies
- University
    - First year
        - English
        - Maths
    - Second year

realpath .따라서 첫 번째 수준을 현재 디렉터리(예: )로 바꾸고 두 번째 수준을 /home/maeda/Downloads상위 디렉터리의 전체 경로(예: )로 바꾸고 싶습니다./home/maeda/Downloads/Music

그래서 저는 다음과 같은 결과를 얻고 싶습니다.

/home/maeda/Downloads
/home/maeda/Downloads/Music
/home/maeda/Downloads/Movies
/home/maeda/University
/home/maeda/University/First year
/home/maeda/University/First year/English
/home/maeda/University/First year/Maths
/home/maeda/University/Second year

달성하는 방법?

답변1

YAML 파일이 유효하다고 가정합니다.

Downloads:
    Music:
    Movies:
University:
    First year:
        English:
        Maths:
    Second year:

당신이 사용할 수있는

yq -r --arg prefix "$(realpath .)" 'paths | [ $prefix, .[] ] | join("/")' file.yaml

yq그거 어디서 났어https://kislyuk.github.io/yq/

이는 jq문서에서 "경로"를 가져오기 위해 표현식을 사용합니다. 이 컨텍스트에서 "경로"는 문서 자체의 특정 항목을 나타내므로 배열 경로는 First year배열 [ 'University', 'First year' ](JSON 표기법을 사용하여 작성됨)입니다.

/이러한 경로 배열은 구분 기호를 사용하여 연결할 수 있습니다 join("/").

realpath .또한 into의 출력을 yq내부 변수의 값으로 전달합니다 $prefix. 이 값은 에 전달되기 전에 각 경로 배열 앞에 추가됩니다 join("/"). 즉, 명령에 의해 출력되는 경로 이름 앞에 추가됩니다 yq.

관련 정보