问题是,我有一个定制的bash脚本,它对指定的文件夹执行特定的操作,语法是:
myscript $1 $2 $3其中,$1是文件夹的名称,$2是作业的其他必要数字参数。
假设我有一个包含多个文件夹的目录,例如:
a
b
c
d
ref-1
ref-2
ref-3我只需要在文件夹上执行脚本,而不是以ref-开头。因为手动执行每个文件的脚本会花费我大量的精力,所以我想弄清楚如何使用正则表达式来限制所需的文件夹,使用反向匹配,比如"extglob",并且对于其中的每一个都使用给定的$2和$3参数执行脚本。
发布于 2011-11-27 01:36:33
例如,您可以使用$(ls -d */|grep -v ^ref-)。
发布于 2011-11-27 04:04:27
这可能对你有用:
ls !(ref-?)或
ls !(ref*)或
ls +({a..d})或者只是
ls ?编辑:
然后可以运行脚本,如下所示:
for first in !(ref-?); do script.sh $first $second $third; done其中second和third是数值参数。
发布于 2011-11-27 05:02:15
这对你来说应该够了-
使用find -type d选项可以将查找搜索限制在目录范围内。提供pattern with -not -name可以帮助您忽略匹配的目录。-exec option可以帮助您启动已找到的所有目录的shell脚本。{} \;只表示一个缓冲空间,供exec一次一个地执行每个目录的shell脚本。-depth n将确保它下降到n个目录级别。
find . -not -name ref\* -not -name .\* -type d -depth 1 -exec ./script.sh {} \;更新:
我的错,我忘了处理两个用户驱动的参数。我可能不是专家,但我认为最简单的方法是将查找结果发送到一个文件,然后对该文件运行for循环。
像这样的东西-
[jaypal~/Temp]$ find . -not -name ref\* -not -name .\* -type d -depth 1 > dirlist
[jaypal~/Temp]$ for i in dirlist; do ./script.sh $i param1 param2; done传递用户驱动参数的替代方法(如@dma_k所建议的)
[jaypal~/Temp]$ find . -not -name ref\* -not -name .\* -type d -depth 1 | xargs script.sh param1 param2https://stackoverflow.com/questions/8280260
复制相似问题