查找文件名是否包含bash脚本中的某个字符串

时间:2018-05-13 22:53:39

标签: bash

我在目录中有一堆输出文件,例如:a.out,b.out c.out等。

我想搜索输出文件,如果输出文件名包含某个字符串(例如“a”),那么它会将相应的输出文件“a.out”打印到屏幕。

在我进入输出文件目录后,这是我的代码:

OUT_FILE="*.out"
OT=$OUT_FILE
STRING="a"

For file in "$OT";do
  if [[$file == *"$STRING"*]];then
    echo $file
  fi
done

我收到的错误是[[* .out:命令未找到。看起来$ file被解释为$ OT,而不是与$ OT匹配的单个文件。

但是当我删除了if语句并且只是做了一个for循环来回显每个$文件时,输出给了我所有以.out结尾的文件。

愿意帮助理解我做错了什么。提前谢谢。

2 个答案:

答案 0 :(得分:2)

[[之后和]]之前需要空格:

for file in *.out;do
  if [[ "$file" == *"$STRING"* ]];then
    printf '%s\n' "$file"
  fi
done

或只是

for file in *"$STRING"*.out; do
    printf '%s\n' "$file"
done

printf '%s\n' *"$STRING"*.out

答案 1 :(得分:2)

没有像[[这样的bashisms(可以在任何Bourne-heritage shell中运行)并且速度非常快,因为它不会分叉任何实用程序:

for file in *.out; do
  case $file in
    (*a*) printf '%s\n' "$file";;
  esac
done

如果您愿意,可以将(*a*)替换为(*$STRING*)

如果您有find了解-maxdepth 1

,请选择find . -maxdepth 1 -name \*"$STRING"\*.out

PS:你的问题有点不清楚。您发布的代码在文件名中对a进行了测试(我的代码也是如此)。但是,您的文字建议您要在文件内容中搜索a。这是什么?你能说清楚吗?