![Bash:循环遍历所有子子目录并对某些文件执行命令](https://linux22.com/image/167931/Bash%EF%BC%9A%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%E6%89%80%E6%9C%89%E5%AD%90%E5%AD%90%E7%9B%AE%E5%BD%95%E5%B9%B6%E5%AF%B9%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我的文件夹结构如下所示
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
shell 选项。
#!/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 "$@"' _ {} +
一旦您对结果感到满意,请删除回声。