![폴더의 파일 이름을 바꾸는 작업을 예약하고 업데이트된 경고 이메일을 보냅니다.](https://linux55.com/image/68740/%ED%8F%B4%EB%8D%94%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%98%88%EC%95%BD%ED%95%98%EA%B3%A0%20%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%EB%90%9C%20%EA%B2%BD%EA%B3%A0%20%EC%9D%B4%EB%A9%94%EC%9D%BC%EC%9D%84%20%EB%B3%B4%EB%83%85%EB%8B%88%EB%8B%A4..png)
폴더의 모든 파일 이름을 바꾸는 쉘 스크립트를 작성 중입니다.
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