BASH como salvar a saída de rm com timestamp?

2

Eu quase tenho este trabalho, Este é um script que será executado no CRON para manter os últimos 10 backups e remover qualquer outra coisa, eu quero registrar isso para manter o controle para se certificar que tudo está em boa ordem, eu tenho isso trabalhando & escrevendo quais arquivos foram apagados, infelizmente não posso definir um prefixo de timestamp.

TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
echo "$TIMESTAMP, " | ls -1tr | head -n -10 | xargs -d '\n' rm -f -v >> $LOGFILE
    
por GodsDead 25.01.2016 / 17:07

2 respostas

4

Você pode usar o comando ts para isso:

ts [-r] [-i | -s] [format]

Algo como o seguinte:

TS_FORMAT="%d-%m-%Y-%H-%M-%S, "
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | ts "${TS_FORMAT}" >> $LOGFILE

ts está incluído no pacote moreutils .

Atualização: sem instalar mais dependências

Você pode usar xargs novamente:

TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | xargs -L 1 -d '\n' echo "${TIMESTAMP}, " >> $LOGFILE

Outra possibilidade é usar sed :

TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | sed "s/^/${TIMESTAMP}/" >> $LOGFILE

Usando awk :

LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | awk '{ print strftime("%d-%m-%Y-%H-%M-%S"), $0}' >> $LOGFILE

E assim por diante.

    
por 25.01.2016 / 17:18
0

Eu gostaria de sugerir uma abordagem baseada em loop para esta questão (embora todos nós façamos parte de uma única linha), e também melhor para a legibilidade. É claro que no CRON basta chamar esse arquivo de script em vez de executar o código diretamente:

strings='ls -1tr | head -n -10'
for file in $strings; do
      rmOutput='rm -f -v $file'
      echo 'date +%d-%m-%Y-%M-%S': $rmOutput >> $LOGFILE
 done
    
por 25.01.2016 / 23:02