以编程方式在多个相同级别的子文件夹中执行相同的操作

时间:2013-10-10 05:12:49

标签: shell

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

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

我想要做的是从/启动脚本,并对所有pdflatex文件执行.tex,而不必手动包含实际的所有子目录脚本文件。

该算法在纸上非常简单:

  • 转到目录/

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

  • 按照 n 级别,再次根据需要使用正则表达式

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

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

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

2 个答案:

答案 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]

使用此脚本:

  • 此处的默认搜索模式为* .tex
  • 如果要指定maxdepth,还必须提供搜索
  • 当您提供搜索时,* .tex 会附加到您传递的内容