0

我有一个对多个文件进行操作的 bash 脚本,但该操作不应发生在文件的特定子集上 - 如果文件名匹配~ .jpg [例如,在 myimage~xa.jpg 中]。

declare -a AFileList2

for sFile in *.jpg
do
   echo "Testing $sFile"
   if [ -d "$sFile" ]
   then
      echo "skipping directory $sFile"
   else
      if [ -f "$sFile" ]
      then
         if [[ "$sFile" =~ "*~*.*" ]]
         then
            echo "skipping $sFile"
         else
            echo "operating on  $sFile"
            AFileList2+=($sFile)
            ((iFilesFound++))
         fi

      fi
   fi
done
echo "Found by eval: $iFilesFound file(s)"

上面 for 循环的关键部分是行

if [[ "$sFile" =~ "*~*.*" ]]

但它不起作用。

我从 pdf Advanced bash scripting guide 中的一个示例中获得它,其中演示脚本读取:

#!/bin/bash
variable="This is a fine mess."
echo "$variable"
if [[ "$variable" =~ "T*fin*es*" ]]
    # Regex matching with =~ operator within [[ double brackets ]].
then
   echo "match found"
   # match found
fi

但即使是这个演示脚本也不能按预期工作。

任何帮助

4

1 回答 1

1

替换这个(通配符?)

[[ "$sFile" =~ "*~*.*" ]]

通过这个正则表达式

[[ "$sFile" =~ .*~.*\..* ]]
于 2015-03-08T13:04:00.127 回答