Supondo que você use uma versão recente de zsh
, ksh93
ou bash
e o nome do arquivo não contenha caracteres de nova linha:
# split up the filename into its parts
IFS=_ read -r pjid env srcid desc date seq free <<< "$filename"
# extract the codepage from the free text
code=${free##*.}
free=${free%.*}
# validate
if [[ $pjid =~ ^[[:alnum:]]{3,8}$ ]] &&
[[ $env == "DEV" || $env == "SYT" || ... ]] &&
[[ $srcid =~ ^[[:digit:]]+$ ]] &&
[[ $desc =~ ^[[:alnum:]]+$ ]] &&
[[ $date =~ ^[[:digit:]]{8}$ ]] && date -d "$date" >/dev/null 2>&1 &&
[[ $seq =~ ^[[:digit:]]+$ ]] &&
[[ $free =~ ^[[:alnum:]]+$ ]] &&
[[ $code =~ ^[[:alnum:]]+$ ]] # need specific codepage validation?
then
echo "file name format is OK"
fi