将 date/timestamp 附加到现有文件

Append date/timestamp to existing files

目录中的文件很少。我想根据通配符条件找到所有文件,然后通过使用单行命令

向其附加日期或时间戳字段来重命名它

示例: foo1.txt foo1.log foo2.txt foo2.log

我想找到所有 .log 文件并通过向其附加日期字段来重命名它们

预期输出: foo1.txt foo1_20210609.log foo2.txt foo2_20210609.log

ls | perl -lne '$date=`date '+%Y%m%d'`; chomp($date); `mv $_ $_$date`;'
  1. 获取文件
  2. 将其通过管道传输到 perl 脚本中
  3. e 选项在行
  4. 中执行
  5. n 选项将输入拆分为行
  6. l 选项为每个添加新行

back ticks 执行 unix 命令

我会在通配符匹配列表上使用“for”循环,然后使用参数扩展和命令替换来拼接其余部分:

for file in *.log
do
  echo mv -- "$file" "${file%.log}_$(date +%Y%m%d).log"
done

中间的碎片分解为:

  • mv -- -- 调用“mv”并明确告诉它没有更多选项;这将我们与可能以 -i 开头的文件名隔离开来,例如
  • "${file%.log} -- 扩展“$file”变量并从末尾删除“.log”
  • _ -- 只是在我们想要的地方添加下划线
  • $(date +%Y%m%d) -- 调用 date 命令并插入结果输出
  • .log -- 只是在末尾添加“.log”部分

如果您喜欢结果命令,请删除“回声”。 如果您想要静态时间戳,则只需使用该文本代替整个 $(date ...) 命令替换。

在您的示例输入中,但使用今天的日期,输出为:

mv -- foo1.log foo1_20210610.log
mv -- foo2.log foo2_20210610.log