Crie um trabalho agendado para renomear os arquivos em uma pasta e envie um e-mail de alerta atualizado

1

Estou escrevendo um script de shell, que pode renomear todos os arquivos da pasta

Precisamos procurar um padrão específico de arquivos a cada 30 segundos.

Os arquivos no formato abaixo precisam ser selecionados,

    core.3467
    core.1234
    core.acde

e eles precisam ser atualizados como abaixo,

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

assim que eles forem atualizados, um e-mail de alerta deve ser enviado para o arquivo core.3467 foi alterado para c.o.r.e.3467

Isto é o que escrevi até agora, mas o comando renomear parece não funcionar,

#!/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
    
por prashanth tv 10.07.2015 / 20:49

2 respostas

0

#!/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

Isso deve fazer ...

    
por 10.07.2015 / 22:30
0

Dando todo o crédito devido ao excelente scriptlet da MelBuslan, deixe-me ajustá-lo para atender a solicitação de um único e-mail:

#!/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
    
por 11.07.2015 / 00:56