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

Shell 以编程方式在多个相同级别的子文件夹中执行相同的操作,shell,Shell,我想编写一个shell脚本,对同一级别子文件夹中相同类型的多个文件执行单个操作-pdflatex。以下是目录结构的简化版本: /-| /a-| | a1.tex | /b-| | b1.tex | /c-| c1.tex 我想做的是让脚本从/启动,并对所有.tex文件执行pdflatex,而不必手动将所有这些子文件包含在实际脚本文件中 该算法在纸上非常简单: 转到目录/ 查找与脚本中给定的正则表达式匹配的所有目录(也可以使用通配符表达式) 向下n级,根据需要再次

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

/-|
 /a-|
  | a1.tex
  |
 /b-|
  | b1.tex
  |
 /c-|
    c1.tex
我想做的是让脚本从
/
启动,并对所有
.tex
文件执行
pdflatex
,而不必手动将所有这些子文件包含在实际脚本文件中

该算法在纸上非常简单:

  • 转到目录
    /

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

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

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

。。。但我不知道如何在unixshell脚本中实现这一点


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


从其他人所说的话中,我唯一可以补充的是几个参数,考虑到问题中希望将其变成一个精心设计的小程序

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 {} \;
然后
chmodu+x pdflatexdirs

现在称之为

pdflatexdirs[可选搜索模式][可选最大深度]

使用此脚本:

  • 这里的默认搜索模式是*.tex
  • 如果要指定maxdepth,还必须提供搜索
  • 当您提供搜索时,*.tex将附加到您传递的任何内容
您更喜欢哪个UNIX shell(例如Bash、ksh、sh等)?或者这有关系吗?