Script usando a entrada do usuário para calcular a data antiga

2

Eu tenho vários arquivos de log que eu tenho que mover de um diretório de produção para um diretório de arquivamento. Eu preciso movê-los pela data de criação. Os arquivos de janeiro de 2016 entram em um diretório de arquivo denominado 2016-01, como um exemplo. Atualmente faço isso manualmente digitando:

$ find /creation/directory/filename -daystart -mtime vXX -exec mv "{}" /destination/directory \;

onde vXX é o número de dias atrás para começar a selecionar arquivos (ou seja, +10 para arquivos modificados há mais de 10 dias). O número de dias atrás muda com base em coisas como quando o final do mês ocorre ou quando determinados diretórios estão cheios.

Eu estou tentando escrever um script bash que vai pedir ao usuário para entrada (o número dias atrás) e, em seguida, incorporar isso no script que irá realizar a pesquisa e o movimento. Estou tendo problemas com o uso do comando date com a entrada do usuário como uma variável.

Eu sei que $ date -d 'now - vXX days' me dá o que preciso em uma linha de comando, mas não consigo descobrir como colocá-lo no script.

Eu tentei algumas variações:

days=0
echo -n "Enter number of days back to begin count > "
read days
echo "Calculated date is "
date -d 'now - ($days) days'

Eu tenho pouca experiência em escrever qualquer coisa no bash e tenho feito tudo certo com outros scripts (graças à ajuda de todos vocês, é claro!), mas variáveis dentro de variáveis e utilizando entradas do usuário estão realmente me matando. Qualquer ajuda é muito apreciada!

(estou usando o RHEL 5).

    
por saltycomms 23.08.2016 / 20:49

1 resposta

0

Este script deve encabeçar você na direção certa.

#!/bin/bash

read -p "Enter number of days back to begin count > " days

echo "Calculated date is "
date -d 'now - '"$days"' days'

find /creation/directory/filename -daystart -mtime +"$days" -exec mv "{}" /destination/directory \;
    
por 23.08.2016 / 21:11