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_tstamp 4 .ttmm_rels_rfc라고 가정하겠습니다. scf_tstamp..so 파일은 opt/etl/tgtfiles 경로에 생성됩니다. ttmm_rels는 4개 파일의 공통 접두사입니다. 서버에 4개의 파일이 생성되면 파일 이름을 포함하여 성공을 알리는 이메일을 보내야 합니다. 그리고 파일 이름을 processd_filename으로 바꿔야 합니다. 따라서 이름을 "처리됨"으로 변경했기 때문에 다음 날 서버에서 동일한 파일을 얻지 못합니다. 1개의 infa 작업이 실패하면 서버에는 2개의 파일만 남게 됩니다. 따라서 2개의 파일 이름이 포함된 성공 이메일을 보내고 2개의 파일 이름을 처리하도록 변경하고 다른 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셸 옵션이 없으면 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]

관련 정보