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 中,您使用globstarshell 选项。

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

一旦您对结果感到满意,请删除回声。

相关内容