Bash: 모든 하위 디렉터리를 반복하고 특정 파일에 대해 명령을 실행합니다.

Bash: 모든 하위 디렉터리를 반복하고 특정 파일에 대해 명령을 실행합니다.

내 폴더 구조는 다음과 같습니다

Main
├── Sub1
|   ├── Subsub1
|   |   |   ├── file1.tex
|   |   |   ├── file2.tex
|   ├── Subsub2
|   |   |   ├── file1.tex
|   |   |   ├── file2.tex
├── Sub2
|   ├── Subsub1
|   |   |   ├── file1.tex
|   |   |   ├── file2.tex
|   ├── Subsub2
|   |   |   ├── file1.tex
|   |   |   ├── file2.tex

pdflatex모든 하위 디렉터리를 반복하고 각 파일에 대해 명령을 실행하고 싶습니다 .

내 시도

for d in */*/ ; do
    pdflatex "$d*.tex"
done

...하지만 작동하지 않습니다.

답변1

Bash에서는 globstar쉘 옵션을 사용합니다.

#!/usr/bin/env bash

shopt -s globstar

for d in Main/**/*.tex; do
  echo pdflatex "$d"
done

아니면 찾기를 이용하세요.

find Main/ -type f -name '*.tex' -exec sh -c 'echo pdflatex  "$@"' _ {} +

결과에 만족하면 에코를 삭제합니다.

관련 정보