폴더의 파일 이름을 바꾸는 작업을 예약하고 업데이트된 경고 이메일을 보냅니다.

폴더의 파일 이름을 바꾸는 작업을 예약하고 업데이트된 경고 이메일을 보냅니다.

폴더의 모든 파일 이름을 바꾸는 쉘 스크립트를 작성 중입니다.

30초마다 특정 패턴의 파일을 검색해야 합니다.

다음 형식의 파일을 선택해야 합니다.

    core.3467
    core.1234
    core.acde

다음과 같이 업데이트해야 합니다.

    c.o.r.e.3467
    c.o.r.e.1234
    c.o.r.e.acde

업데이트되면 파일 core.3467이 core3467로 변경되었음을 알리는 경고 이메일을 보내야 합니다.

지금까지 작성한 내용인데 rename 명령이 작동하지 않는 것 같습니다.

#!/bin/bash
#go the designated directory
cd "<dir_name>"
mail="[email protected]"
#writing all the files in the specified format
ls core* > current.txt
a='cat current.txt'

#renaming the file
rename "s/core/c.o.r.e."*

#writing updated file names
ls c.o.r.e* > updated.txt
b='cat updated.txt'

#sending alert email
mail -s "Files $a changed to $b" $mail

답변1

#!/bin/bash

[email protected]

for file in $(ls /my/directory/name/core*)
do
  newname=$(echo ${file}|sed -e "1,1s/core/c.o.r.e/")
  mv ${file} ${newname}
  echo "File Renamed..."|mail -s "File ${file} renamed to ${newname} ${email_address}
done

이렇게 해야 합니다...

답변2

이메일 요청을 처리할 수 있도록 수정한 훌륭한 스크립트릿을 제공한 MelBuslan에게 감사드립니다.

#!/bin/bash

[email protected]

if test -n "$(find /my/directory/name -maxdepth 1 -name 'core*' -print -quit)" ; then
    for file in $(ls /my/directory/name/core*)
    do
      newname=$(echo ${file}|sed -e "1,1s/core/c.o.r.e/")
      mv ${file} ${newname}
      echo "File ${file} renamed to ${newname}" >> updated.txt
    done
    cat updated.txt | mail -s "Files renamed" ${email_address}
    rm updated.txt
fi

관련 정보