列出目录并查找名称中包含特定字符串的文件

时间:2010-11-22 20:04:54

标签: shell

我是shell脚本的新手,所以请放轻松,因为我知道这很可能是真正基本的东西。我的问题是,我需要编写一个脚本来查看目录并告诉我它是否找到了我在文件名中指定的字符串的匹配项。这是一个例子。

我有一个名为tmp的目录。在该目录中是名为tmp-a,temp-a,temporary-a等的文件。如果脚本查看目录并发现文件名为'tmp'或'temp',则应继续该脚本,但如果它没有看到任何与shell脚本中指定的字符串匹配的文件名,则应该退出。我基本上是在寻找一个可以应用'或'的条件'if [-f filename]'语句。

我希望这是有意义的,并且一如既往地提前谢谢。

1 个答案:

答案 0 :(得分:2)

模式tmp*扩展为名称以tmp开头的文件列表,如果没有匹配的文件,则扩展为包含文字模式本身的单字列表。

set --
for pattern in 'tmp*' 'temp*'; do
  set -- $pattern "$@"
  if [ ! -e "$1" ]; then shift; fi
done
if [ $# -eq 0 ]; then
  echo "No matching file"
else
  for x in "$@"; do …; done
fi

在bash中,您可以请求将不匹配任何文件的模式扩展为空列表,这简化了很多事情。

shopt -s nullglob
set -- tmp* temp*
if [ $# -eq 0 ]; then …

zsh也是如此,它允许按模式设置。

set -- tmp*(N) temp*(N)
if [ $# -eq 0 ]; then …

如果您希望在目录内递归搜索,可以使用find命令。

if [ -n "$(find -name 'tmp*' -o -name 'temp*' | head -c 1)" ]; then
  # there are matching files
fi