디렉터리 이름을 인수로 전달하여 출력 파일을 재귀적으로 생성하는 방법은 무엇입니까?

디렉터리 이름을 인수로 전달하여 출력 파일을 재귀적으로 생성하는 방법은 무엇입니까?

재귀적 파일 생성 및 중첩된 하위 디렉터리와 관련된 문제를 해결하려고 합니다. 다음과 같은 중첩된 디렉터리 구조를 만드는 명령을 작성했습니다.

    mkdir -p {2019,2020}/{01..03}

    ├── 2019
    │   ├── 01
    │   ├── 02
    │   ├── 03
    ├── 2020
    │   ├── 01
    │   ├── 02
    │   ├── 03

상위 디렉토리는 연도를 나타내고 하위 디렉토리는 번호가 지정된 월에 해당합니다. 1월은 01, 2월은 02 등입니다.

cal나는 내장 함수와 함께 이 디렉토리 구조를 사용하여 각 하위 디렉토리 이름에 해당하는 달력 연도 및 월의 인쇄 파일을 반복적으로 생성하는 방법을 알아내려고 노력 중입니다 . 예상되는 출력은 다음과 같습니다.

    ├── 2019
    │   ├── 01
    |   |  ├── 01-2019-cal.dat   
    │   ├── 02
    |   |  ├── 02-2019-cal.dat
    │   ├── 03
    |   |  ├── 03-2019-cal.dat
    ├── 2020
    │   ├── 01
    |   |  ├── 01-2020-cal.dat
    │   ├── 02
    |   |  ├── 02-2020-cal.dat
    │   ├── 03
    |   |  ├── 03-2020-cal.dat

예를 들어, 특정 연도 및 월에 이 작업을 한 번만 수행하는 명령은 입니다 cal 03 2020 > 03-2020-cal.dat. 그러나 디렉토리 구조 자체를 에 전달하고 cal올바른 위치에 올바른 출력을 생성하여 이 문제를 해결하려면 어떻게 해야 합니까? 이것이 내 명령줄 기술의 절대적인 한계입니다... 이 명령을 사용하여 유사한 요소에 대한 질문에 대한 몇 가지 답변을 여기에서 보았지만 find내가 읽고 있는 내용을 실제로 이해하지 못합니다.

도움을 주셔서 감사합니다.

답변1

내가 bash를 처음 접하지 않았다면 다음을 시도해 볼 수 있습니다.

for d in */*; do 
  cal "${d#*/}" "${d%/*}" > "${d%/*}/${d#*/}/${d#*/}-${d%/*}-cal.dat"
done

연도 폴더가 포함된 디렉터리에 있다고 가정합니다.

결과 :

├── 2019
│   ├── 01
│   │   └── 01-2019-cal.dat
│   ├── 02
│   │   └── 02-2019-cal.dat
│   └── 03
│       └── 03-2019-cal.dat
├── 2020
│   ├── 01
│   │   └── 01-2020-cal.dat
│   ├── 02
│   │   └── 02-2020-cal.dat
│   └── 03
│       └── 03-2020-cal.dat

cat파일 중 하나 :

cat 01-2019-cal.dat

출력(스페인어 버전은 죄송합니다):

     Enero 2019       
do lu ma mi ju vi sá  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30 31 

비결은 다음과 같습니다.매개변수 확장.

관련 정보