在所有子目录中的特定文件上运行脚本

时间:2017-04-15 03:19:16

标签: linux bash shell sh

我编写了一个脚本(foo),它在输入文件中对文本进行简单的sed替换。我有一个目录(a)包含大量的子目录(a / b1,a / b2等),它们都有相同的子目录(c等),并包含一个同名的文件(d)。所以粗略的结构是:

a/
-b1/
--c/
---d
-b2/
--c/
---d
-b3/
--c/
---d

我想在树中的每个文件(d)上运行我的脚本。不幸的是,以下情况并不奏效:

sudo sh foo a/*/c/d

如何在这样的bash命令中使用通配符?我是否必须使用具有特定max和mindepth的find,或者是否有更优雅的解决方案?

1 个答案:

答案 0 :(得分:0)

示例中的通配符扩展应该有效,并且不需要查找。我假设b和c只是一些通用文件名来简化问题。您的任何文件夹/文件是否包含空格?

如果你这样做:

ls -l a/*/d/c

您是否获得了所需的文件?如果是这样,那么就是如何处理脚本文件中的$*。介意与我们分享?

如您所见,通配符扩展工作

$ ls -l a/*/c/d
-rw-r--r--  1 user  wheel  0 15 Apr 08:05 a/b1/c/d
-rw-r--r--  1 user  wheel  0 15 Apr 08:05 a/b2/c/d
-rw-r--r--  1 user  wheel  0 15 Apr 08:05 a/b3/c/d