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  "$@"' _ {} +

結果に満足したらエコーを削除します。

関連情報