Shell 以编程方式在多个相同级别的子文件夹中执行相同的操作
我想编写一个shell脚本,对同一级别子文件夹中相同类型的多个文件执行单个操作-Shell 以编程方式在多个相同级别的子文件夹中执行相同的操作,shell,Shell,我想编写一个shell脚本,对同一级别子文件夹中相同类型的多个文件执行单个操作-pdflatex。以下是目录结构的简化版本: /-| /a-| | a1.tex | /b-| | b1.tex | /c-| c1.tex 我想做的是让脚本从/启动,并对所有.tex文件执行pdflatex,而不必手动将所有这些子文件包含在实际脚本文件中 该算法在纸上非常简单: 转到目录/ 查找与脚本中给定的正则表达式匹配的所有目录(也可以使用通配符表达式) 向下n级,根据需要再次
pdflatex
。以下是目录结构的简化版本:
/-|
/a-|
| a1.tex
|
/b-|
| b1.tex
|
/c-|
c1.tex
我想做的是让脚本从/
启动,并对所有.tex
文件执行pdflatex
,而不必手动将所有这些子文件包含在实际脚本文件中
该算法在纸上非常简单:
- 转到目录
/
- 查找与脚本中给定的正则表达式匹配的所有目录(也可以使用通配符表达式)
- 向下n级,根据需要再次跟随正则表达式
- 对当前目录中的所有
文件执行.tex
pdflatex
shell脚本是否允许这种操作?如果是这样的话,一个实现会是什么样子?
find
似乎就是您想要的:
find / -mindepth 1 -maxdepth 1 -type f -exec pdflatex {} \;
这将对当前目录中的所有文件执行pdflatex
- 若要仅对文件
级别降低执行操作,请将上面的n
和-mindepth
选项的-maxdepth
替换为1
n+1
- 要说您希望文件名与
匹配,请说*.tex
find/-mindepth 1-maxdepth 1-type f-name“*.tex”-exec pdflatex{}代码>
#!/bin/bash
pattern='*.tex'
if [ -z $1 ]; then
pattern="${1}.tex"
fi
maxdepth=' '
if [ ! -z $2 ]; then
maxdepth=" -maxdepth $2 "
fi
# borrowed from @devnull ;)
find / -mindepth 1${maxdepth}-type f -name "$pattern" -exec pdflatex {} \;
然后chmodu+x pdflatexdirs
现在称之为
pdflatexdirs[可选搜索模式][可选最大深度]
使用此脚本:
- 这里的默认搜索模式是*.tex
- 如果要指定maxdepth,还必须提供搜索
- 当您提供搜索时,*.tex将附加到您传递的任何内容