使用正規表示式檢查目錄內的檔案名

使用正規表示式檢查目錄內的檔案名

我有一個目錄內的文件列表,我想製作一個 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
對於 * 中的 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])
            echo "$x 匹配"
            ;;
        *)
            echo "$x 不符"
    埃薩克
完畢
#                       而且,令人惱火的是,
對於 .* 中的 x
    echo "$x 不符"
完畢

相關內容