使用正则表达式检查目录内的文件名

使用正则表达式检查目录内的文件名

我有一个目录内的文件列表,我想编写一个 bash 脚本,使用正则表达式检查其中的每个文件名是否都具有以下语法:

xxxx_xxxx_xx_xx

其中 x 是数字。

编辑:我只需要正则表达式

答案1

怎么样

#/usr/bin/env bash
for f in *
do
  [[ $f =~ [0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2} ]] || 
    echo "File $f does not match"
done

正则表达式检查任意数字([0-9])。花括号中的数字是重复次数,因此[0-9]{4}将匹配任意 4 位数字。

我建议你不要使用 bash 来做这件事,而应该使用 find。它可能更快,而且更易于移植(并非所有 shell 都能处理正则表达式):

find -regextype posix-egrep -not -regex '\./[0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2}'

答案2

它很笨重,但应该非常便于携带:

/bin/sh #!/bin/sh 复制代码
对于 x 在 *
    案例“$x”
        [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9])
            echo "$x 匹配"
            ;;
        *)
            echo "$x 不匹配"
    埃萨克
完毕
#                       更让人恼火的是,
对于 x 在 .*
    echo "$x 不匹配"
完毕

相关内容