首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash -基于文件名的子字符串运行脚本(可能使用通配符)

bash -基于文件名的子字符串运行脚本(可能使用通配符)
EN

Stack Overflow用户
提问于 2012-01-07 22:24:16
回答 2查看 3.1K关注 0票数 1

我得到了下面这个简单的脚本,它调用一个外部脚本,其中包含一些文件名和参数,或者是一个分隔符,或者是一组剪切位置。我的问题是:有没有办法让文件名“动态使用通配符”,即目录始终包含这些文件名,但两端都有额外的文本?但是脚本可以进行某种匹配,以获得基于“包含”的完整文件名。

当前/release/ext/目录内容:

代码语言:javascript
运行
复制
2011storesblah.dat
hrlatest.dat
emp_new12.txt

例如,今天的目录包含这些文件(但下周该目录中的文件名可能会有稍微不同的前缀。例如:

代码语言:javascript
运行
复制
stores_newer.dat
finandhr.dat
emps.txt

脚本:

代码语言:javascript
运行
复制
 #!/bin/bash
    FILES='/release/ext/stores.dat "|"
    /release/ext/emp.txt 1-3 4-11 15-40
    /release/ext/hr.dat "|" 2'
    for f in $FILES
    do
        echo `sh myexternalscript.sh $f`;
    done

注意:如果我的脚本中的文件与目录中的两个以上的文件匹配(它总是只匹配一个),那么就不需要处理这种情况。此外,它只能匹配脚本中指定的文件类型。而且,我不需要递归搜索,只需要在/release/ext/目录中查找即可。我运行的是SunOS 5.10。

EN

回答 2

Stack Overflow用户

发布于 2012-01-07 22:32:41

代码语言:javascript
运行
复制
$FILES=`find /release/ext -name *stores*.dat`
for FILE in $FILES do
  # need to test for empty, case $FILES is empty
  test -n "$FILE" && /do/whatever/you/want
done;
票数 1
EN

Stack Overflow用户

发布于 2012-01-08 07:05:22

不清楚管道字符和数字在$FILES变量中的作用。然而,这里有一些你可能会发现有用的东西:

代码语言:javascript
运行
复制
#!/bin/bash
filespecs='*stores*.dat *hr*.dat *emp*.txt'
dir='/release/ext'

cd "$dir"
for file in $filespecs
do
    sh myexternalscript.sh "$dir/$file"
done

注意,您的问题被标记为"bash“,并且您在shebang中使用了"bash”,但是由于某些原因,您在调用其他脚本时使用了"sh“。在某些系统上,sh与Bash是符号链接的,但当直接调用时,它的行为将与Bash不同。在许多系统上,sh与Bash是完全分开的。

为了扩展globs并合并其他参数,您将需要违反总是引用变量的Bash规则(这是一个例外的例子)。

代码语言:javascript
运行
复制
filespecs='*stores*.dat | 3
*hr*.dat 4 5
*emp*.txt 6 7 8'
while read -r spec arg1 arg2 arg3 arg4
do
    sh myexternalscript.sh "$dir"/$spec "$arg1" "$arg2" "$arg3" "$arg4"
done < <(echo "$filespecs")

可以根据需要使用任意多的"arg“参数。Extras将作为空参数传递,但要设置参数。如果接受它们的参数比变量多,那么最后一个变量将包含除与其相对应的余数之外的所有余数。这个版本不需要cd,因为glob直到目录被前置时才被扩展,而在第一个版本中,glob在目录被前置之前被扩展。

如果您以问题中显示的方式引用管道,则双引号将包含在参数中。在我展示的方式中,只有竖线字符被传递,但它是受保护的,因为变量在被引用时被引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8770369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档