linux搜索具有相同前缀的多个文件并在电子邮件中仅发送文件名

linux搜索具有相同前缀的多个文件并在电子邮件中仅发送文件名

我们使用 korn shell.. 要求是 2 个 informatica 作业使用 tstamp 创建 4 个文件(每个 infa 作业创建 2 个文件),所以可以说文件名 1.ttmm_rels_prspt.ctl_tstamp 2.ttmm_rels_prspt.lsf_tstamp 3. ttmm_rels_rfc.ctl_tstamp 4. ttmm_rels_rfc。 scf_tstamp..so 文件在以下路径 opt/etl/tgtfiles 中创建。 ttmm_rels 是 4 个文件的公共前缀。如果在服务器上创建了 4 个文件,我们必须发送一封电子邮件,说明成功并包含文件名。并且文件应重命名为 processd_filename。因此第二天我们不会在服务器上获得相同的文件,因为我们重命名为“已处理”。如果 1 个 infa 作业失败,服务器上将只有 2 个文件。因此,发送一封包含 2 个文件名的成功电子邮件,并将这 2 个文件重命名为processd,也为其他 2 个文件发送延迟电子邮件(如果一个 infa 作业失败,我们总共发送 2 封电子邮件)在重新运行 infa 作业时,我们必须再次发送成功通过电子邮件发送并将文件名重命名为processd_filename

答案1

假设bash

shopt -s nullglob
files=( ttmm_rels* )

if [[ -n "$files" ]]; then
  msg="$(printf '%s\n' "${files[@]}")"
  subj="Success"
else
  msg="Sorry, no files yet"
  subj="Delay"
fi

printf '%s\n' "$msg" | mail -s "$subj" [email protected]

对于ksh93没有nullglobshell 选项的 ,您必须测试通配模式是否与任何内容匹配:

files=( ttmm_rels* )

if [[ "${#files}" == 1 && "$files" == "tmm_rels*" && ! -f "ttmm_rels*" ]]; then
  msg="Sorry, no files yet"
  subj="Delay"
else
  msg="$(printf '%s\n' "${files[@]}")"
  subj="Success"
fi

printf '%s\n' "$msg" | mail -s "$subj" [email protected]

相关内容