我有一个在文件夹内运行的 shell 函数(在我的例子中,它查找 *.eps` 文件并将它们转换为没有空白边框的 pdf)。让我们通过以下函数对此进行抽象:
function do_here() {
echo $(pwd)
}
我寻找一种智能的方法来遍历给定根路径的目录和路径,并对每个树叶ROOT_PATH
进行操作。do_here
可能会有象征性的叶子,但这个要求在这一点上似乎是一个加分项。
理由似乎是
ROOT_PATH
使用别名遍历目录to_path
;- 跑
cd $to_path
; - 跑
do_here
; - 转到步骤 2。
我不知道如何从步骤 1 中获取目录路径列表。
要获取所有目录,就像获取目录中的所有文件一样,您可以使用globbing;然后,您将使用
for
循环遍历结果,并启动子 shell (( commands in subshell )
) 或pushd
/popd
堆栈上的目录。例如:让我们把它分开
Bash 还支持
**
递归 globbing,前提shopt -s globstar
是已设置。如果你在 glob 后缀上你只能得到目录/
。添加dotglob
这样您就不会错过名称以点开头的目录。所以,例如
请注意,
**
shell 之间的工作方式存在一些差异,即关于目录树内的以下符号链接。如果树包含指向另一个目录的链接,至少某些版本的 Bash 会跟随它,可能会超出树。(我不确定你所说的“象征性叶子”是什么意思,所以我不知道这是否是个问题。)