我编写了一个脚本(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
,或者是否有更优雅的解决方案?
答案 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