将日期/时间戳附加到现有文件
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”文件。以上是关于将日期/时间戳附加到现有文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 使用 Interop 在 en excel 文件中添加日期时间戳