
我有一個目錄內的文件列表,我想製作一個 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 不符" 完畢