#!/bin/bash
given_file=$1 # supply file to get backed up with timestamp
answer_interstital=$(stat -c '%.16y' $given_file) # 2021-08-23 15:09 stat given file extract out last changed timestamp using the -c flag
# the '%.16y' specifies we want 16 character wide format of timestamp
first_portion=$( echo $answer_interstital | cut -c6-7,9-10) # 0823
second_portion=$(echo $answer_interstital | cut -c12-13,15-16) # 1509
cool_lastchanged_timestamp="${first_portion}_${second_portion}" # print both of above portions separated with an underbar
backup_filename=${given_file}~~${cool_lastchanged_timestamp} # create backup file using formatted timestamp
cp -p $given_file $backup_filename # backup file from some_file to some_file~~0823_1509
使用 GNU 工具,
这将获得给定文件的最后修改时间戳(无亚秒级分辨率),并用于将其重新格式化为与将产生
date
的格式相同的格式。stat -c %y file
例子:
可以直接对格式规范使用
printf
-like 格式%y
,但不能修改中间的一段字符串:这会在 19 个字符后截断字符串,从而删除亚秒级数据,但时区信息也会被忽略。
好的,因为我可以指定一个类似 printf 的长度/填充(
%010s
例如),让我们回到原始的 printf 文档,该文档记录的精度实际上是字段的最大长度。和 tadaaa.... 它以stat
格式工作!(此处截断以仅保留日期部分):这是一种从 stat 时间戳中提取部分然后生成自定义日期输出的便捷方法