Bash renomeia para hora

2

Como posso renomear um arquivo para corresponder ao tempo atual (arredondado). Se for por exemplo 10:55 ou 11:05, então eu gostaria de renomeá-lo para 11 .

Algo parecido com isto:

mv file.txt file_'date +%H'.txt

mas com o arredondamento descrito acima.

Obrigado

    
por Dado 14.11.2013 / 00:28

3 respostas

2

hour=$(date +%H);[[ $(date +%M) -ge 30 ]]&&let hour++;[[ $hour = 24 ]]&&hour=0;hour=$(printf %02d $hour);for f in *.txt;do mv "$f" "${f%.txt}_$hour.txt";done

    
por 14.11.2013 / 00:36
0

Você está tentando arredondar o tempo para os 3600 segundos mais próximos.

Geralmente, para arredondar algo, adicione meia unidade e trunque para essa unidade; isso é fácil de usar usando divisão inteira (divida pela unidade e descarte o restante, depois multiplique pela unidade - isso sempre será truncado, isto é, arredondado para baixo, mas lembre-se de que você já adicionou meia unidade).

HOUR=$(date -d @$(( ( $(date +%s) + 1800 ) / 3600 * 3600 )) +%H)
mv "file.txt" "file_${HOUR}.txt"
    
por 14.11.2013 / 02:17
0

No Mac OS X (data do BSD):

mv file.txt file_$(date -v +30M +%H).txt

No Linux (data GNU):

mv file.txt file_$(date '+30min' +%H).txt

Ambos fazem a mesma coisa: imprima o valor da hora atual + 30 minutos.

    
por 14.11.2013 / 03:29