将日期/时间戳附加到现有文件

Posted

技术标签:

【中文标题】将日期/时间戳附加到现有文件【英文标题】:Append date/timestamp to existing files 【发布时间】:2021-08-26 19:04:33 【问题描述】:

目录中的文件很少。我想根据通配符标准查找所有文件,然后通过使用单行命令向其附加日期或时间戳字段来重命名它

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

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

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

【问题讨论】:

【参考方案1】:

我会在匹配的通配符列表上使用“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

【讨论】:

【参考方案2】:
ls | perl -lne '$date=`date '+%Y%m%d'`; chomp($date); `mv $_ $_$date`;'
    文件 将其通过管道传输到 perl 脚本中 e 选项在行中执行 n 选项将输入分成几行 l 选项为每个添加新行

反引号执行unix命令

【讨论】:

当心稀有(但完全合法)文件名,例如“foo bar.log”或$'foo\nbar.log'被ls | ... 错误解析。我认为 OP 还希望限制对“.log”文件的更改,而这里的裸 ls 也会抓取他们的“foo1.txt”文件。

以上是关于将日期/时间戳附加到现有文件的主要内容,如果未能解决你的问题,请参考以下文章

附加到 parquet 文件,由具有重叠时间戳的数据分区

使用 C# 使用 Interop 在 en excel 文件中添加日期时间戳

使用 SSIS 包将日期时间戳列添加到最终目标表

用于将日期和时间列转换为 .csv 中的 unix 时间戳的 Bash 脚本

如何在从 csv 附加日期时间时摆脱单词“时间戳”和元组?

如何使用 gradle 将时间戳附加到生成的 jar 中?