排除具有特定模式的shell脚本中的文件

时间:2014-07-17 10:32:09

标签: bash shell

我需要创建一个shell脚本,用于创建特定目录中文件的缩略图,但不包括已创建的文件。 原始文件使用五位数字.jpg命名。例如。 13993.jpg 。缩略图名为 13993_thumb.jpg 。 下面的代码是我开始使用的,我无法找到匹配的模式... 有什么建议吗?

 #!/bin/bash
 for i in *.jpg
 do
 echo "Prcoessing image $i ..."
 [[ $i == "0-9_thumb.jpg"* ]]  && continue
 # /usr/bin/convert -thumbnail 200 $i thumb.$i
 done

2 个答案:

答案 0 :(得分:1)

更好地利用工具和管道的力量:

$ ls *.jpg
11223.jpg  12345_thumb.jpg  42424.jpg  99999_thumb.jpg
$ ls *.jpg | grep -v '^[0-9]\{5\}_thumb\.jpg' | while read f; do echo convert $f ... ; done
convert 11223.jpg ...
convert 42424.jpg ...

您案例中的正则表达式:

[[ "12345_thumb.jpg" =~ ^[0-9]{5}_thumb\.jpg$ ]]

答案 1 :(得分:0)

您没有使用正确的glob模式。您需要使用:

[[ "$i" == [0-9]*"_thumb.jpg" ]] && continue
  1. 字符类[0-9]*将匹配1位或更多位数
  2. Glob模式不应该在引号中,只有文字文本需要在引号中