Ste*_*eve 2 grep shell-script filenames patterns
我的任务是编写一个 shell 脚本来检查文件名是否符合特定模式,但我不知道如何去做。
文件名应遵循如下所示的模式:
(Project-ID)_(Env)_(Source-System-ID)_(DataDescriptor)_(CCYYMMDD)_(Seq)_(Freeformat)_(codepage)
Run Code Online (Sandbox Code Playgroud)
示例文件可能如下所示:
ABC_PRD_00227_ACC_20130128_01_LTSB.CP1252
Run Code Online (Sandbox Code Playgroud)
如果文件不符合模式,最好能显示某种警告。
假设您使用最新版本的zsh
, ksh93
orbash
并且文件名不包含换行符:
# 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
Run Code Online (Sandbox Code Playgroud)