Bash 重命名为时间

Bash 重命名为时间

如何重命名文件以匹配当前(四舍五入)时间。例如,如果是 10:55 或 11:05,那么我想将其重命名为11

像这样:

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

但要按照上面描述的进行舍入。

谢谢

答案1

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

答案2

您正在尝试将时间四舍五入到最接近的 3600 秒。

一般来说,为了四舍五入,先添加半个单位,然后截断为该单位;这很容易用整数除法来完成(除以单位并丢弃余数,然后乘以单位 - 这将始终截断,即向下舍入,但请记住您已经添加了半个单位)。

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

答案3

在 Mac OS X(BSD 日期)上:

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

在 Linux 上(GNU 日期):

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

两者的作用相同:打印当前时间的小时值 + 30 分钟。

相关内容