Unix:Bash:搜索特定目录

时间:2015-01-28 17:04:45

标签: bash unix

我正在使用Bash编写脚本,我正在尝试查找特定目录。我非常接近,我只是被卡住了。

我正在搜索名称中有一到三位数的目录。

Ex:Ex1,Ex23,Ex456。

当我对这些目录进行罚款时,我想运行某个脚本。

我可以让它通过所有单个数字目录,但是当我尝试让我的脚本执行多个数字时,它不起作用。

编辑:当我说它不起作用时,它会运行并找到一个包含3位数的目录,但它会忽略所有带有两位或一位数的目录。

脚本:

for directory in  Ex[0-9][?0-9][?0-9]/
do
    ./test "$directory"
    echo "Directory is: " $directory
done

4 个答案:

答案 0 :(得分:2)

最简单的解决方案就是使用三个球。

for directory in Ex[0-9] Ex[0-9][0-9] Ex[0-9][0-9][0-9]

如果您愿意,可以使用=~正则表达式匹配工具在循环中进行过滤。像(未经测试)的东西:

for directory in  Ex[0-9]*/
do
    if [[ "$directory" =~ Ex[0-9]{1,3} ]]; then
        ./test "$directory"
        echo "Directory is: " $directory
    fi
done

答案 1 :(得分:0)

我认为您将可选指标放在错误的位置。它会在每个字符集之后表示它是可选的。像这样:

Ex[0-9][0-9]?[0-9]?

答案 2 :(得分:0)

这应该有效:

 for directory in Ex[0-9]*
    do 
       ./test "$directory"
       echo "Directory is: " $directory
    done

答案 3 :(得分:0)

你也可以这样做:

for directory in $(find . -name "Ex[0-9]*" | grep -E "Ex[0-9]{1,3}$")
do
   #My stuff
   ......
done