Linuxは同じプレフィックスを持つ複数のファイルを検索し、電子メールでファイル名のみを送信します。

Linuxは同じプレフィックスを持つ複数のファイルを検索し、電子メールでファイル名のみを送信します。

私たちはkornシェルを使います。要件は、2つのInformaticaジョブがtstampを使用して4つのファイルを生成するため(各infaジョブは2つのファイルを生成するため)、1.ttmm_rels_prspt.ctl_tstamp 2.ttmm_rels_prspt.lsf_tstamp 3. ttmm_rels_rfc.ctl_ts ttmm_rels_rfcだとしましょう。 scf_tstamp..so ファイルは opt/etl/tgtfiles パスに生成されます。 ttmm_relsは4つのファイルの共通接頭辞です。サーバーに4つのファイルが作成されたら、ファイル名を含む成功を知らせるEメールを送信する必要があります。そして、ファイル名をprocessd_filenameに変更する必要があります。そのため、名前を「処理済み」に変更したため、翌日サーバーから同じファイルを取得できません。 1つのinfa操作が失敗すると、サーバーには2つのファイルしか残りません。したがって、2つのファイル名を含む成功したEメールを送信し、2つのファイル名を処理するように変更し、他の2つのファイルに対して遅延メールも送信します(1つのinfa操作が失敗した場合は合計2つのEメールを送信します)。 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シェルオプションがない場合は、nullglobワイルドカードパターンが一致するものをテストする必要があります。

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]

おすすめ記事