2

Как я могу переименовать файл, чтобы соответствовать текущему (округленному) времени. Если это, например, 10:55 или 11:05, то я бы хотел переименовать его в 11 .

Что-то вроде этого:

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

но с округлением, как описано выше.

Спасибо

3 ответа3

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

0

Вы пытаетесь округлить время до ближайших 3600 секунд.

Как правило, для округления чего-либо добавьте половину единицы, а затем обрежьте до этой единицы; это легко сделать с помощью целочисленного деления (разделить на единицу и отбросить остаток, затем умножить на единицу - это всегда будет усечено, т.е. округлено вниз, но помните, что вы уже добавили половину единицы).

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

В Mac OS X (дата BSD):

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

В Linux (дата GNU):

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

Оба делают одно и то же: выведите значение часа текущего времени + 30 минут.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .