-1

我想编写一个 shell 脚本来执行单个操作——pdflatex在同级子文件夹中的多个相同类型的文件上。这是目录结构的简化版本:

/-|
 /a-|
  | a1.tex
  |
 /b-|
  | b1.tex
  |
 /c-|
    c1.tex

我想做的是让脚本从 启动/,并pdflatex在所有.tex文件上执行,而不必手动将所有这些子目录包含在实际的脚本文件中。

该算法在纸面上很简单:

  • 转到目录/

  • 查找与脚本中给出的正则表达式匹配的所有目录(也可以使用通配符表达式)

  • 向下n级,根据需要再次遵循正则表达式

  • pdflatex对当前目录中的所有.tex文件执行

...但我不确定如何在 Unix shell 脚本中实现这一点。

shell 脚本是否允许这种操作?如果是这样,实现会是什么样子?

4

2 回答 2

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 {} \;

于 2013-10-10T05:19:11.150 回答
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]

使用此脚本:

  • 这里的默认搜索模式是 * .tex
  • 如果要指定 maxdepth,还必须提供搜索
  • 当您提供搜索时,* .tex将附加到您传递的任何内容
于 2013-10-10T05:37:27.530 回答