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
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
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"
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.