我想编写一个shell脚本来执行单个操作 - pdflatex
- 在同一级子文件夹中对同一类型的多个文件执行操作。这是目录结构的简化版本:
/-|
/a-|
| a1.tex
|
/b-|
| b1.tex
|
/c-|
c1.tex
我想要做的是从/
启动脚本,并对所有pdflatex
文件执行.tex
,而不必手动包含实际的所有子目录脚本文件。
该算法在纸上非常简单:
转到目录/
查找与脚本中给出的正则表达式匹配的所有目录(也可以使用通配符表达式)
按照 n 级别,再次根据需要使用正则表达式
对当前目录中的所有pdflatex
个文件执行.tex
...但我不确定如何在Unix shell脚本中实现它。
shell脚本是否允许这种操作?如果是这样,实现会是什么样的?
答案 0 :(得分:3)
find
正是您所寻找的:
find / -mindepth 1 -maxdepth 1 -type f -exec pdflatex {} \;
这将对当前目录中的所有文件执行pdflatex
。
要仅对文件n
级别执行操作,请将1
替换为n+1
以上的-mindepth
和-maxdepth
选项
为了说您想要匹配*.tex
的文件名,请说
find / -mindepth 1 -maxdepth 1 -type f -name "*.tex" -exec pdflatex {} \;
答案 1 :(得分:0)
我唯一可以从其他人所说的内容中添加的是一些参数,考虑到这个问题需要将其变成一个人为的小程序。
<强> pdflatesxdirs 强>
#!/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 {} \;
然后chmod u+x pdflatexdirs
现在将其称为
pdflatexdirs [optional search pattern] [optional maxdepth]
使用此脚本: