【发布时间】:2020-09-14 03:13:35
【问题描述】:
我有一个包含文件路径和时间戳的文件。
xxxx/view/css/animate.css/3.1.1/animate.min.css: 1494509091
xxxx/view/fonts/cinzel/fonts.css: 1494509091
xxxx/view/fonts/garamondcondot-book/fonts.css: 1494509092
xxxx/view/fonts/gotham-narrow/fonts.css: 1494509092
xxxx/view/fonts/gotham/fonts.css: 1494509092
xxxx/view/fonts/greatvibes/fonts.css: 1494509092
xxxx/view/fonts/indie-flower/fonts.css: 1494509092
xxxx/view/fonts/katibeh/fonts.css: 1494509092
xxxx/view/fonts/lobster-two/fonts.css: 1494509092
xxxx/view/fonts/museo/fonts.css: 1494509092
xxxx/view/fonts/myriad-pro/fonts.css: 1494509092
任务是使用 git log 检查每个文件的最后修改日期。 这很好,并且使用这个命令:
sed -E 's|(.*): .*|echo \1: $(git log -1 --pretty="format:%ct" \1)|e' file.yml
这是非常好的和有用的,但我发现了一个问题。由于有超过 500 个文件路径,我有一些文件在 git 日志中没有任何信息。问题是这些文件我无法从 sed 命令中获取任何时间戳信息。 正确的方法是,如果 git log 更改了新的时间戳信息,否则什么都不做,所以保留旧的。
例如:如果我在 git log 中没有信息,我会收到此错误信息:
fatal: ambiguous argument 'xxx/compiled/css/*FILENAME*': unknown revision or path not in the working tree.
【问题讨论】:
-
git log -1 --pretty="format:%ct" \1 2> /dev/null重定向标准错误 -
不幸的是,这不是一个好的解决方案,因为我在 git log 中没有信息,我有空格:catalog/view/theme/bellajuwelen/stylesheet/stylesheet.css: 1565000507(好,所以有信息在 git log 中)catalog/view/theme/bikepro/stylesheet/animations.css:catalog/view/theme/bikepro/stylesheet/fonts.css:(糟糕,我在 git log 中没有信息但删除了最新的时间戳,哪个不好)目录/视图/主题/bikepro/stylesheet/stylesheet.css:
-
s|(.*): (.*)|echo \1: $(git log -1 --pretty="format:%ct" \1 2> /dev/null || echo \2)|e'怎么样 -
出了点问题,无法识别“按钮”
-
您最初使用
|作为 sed 分隔符,但建议的新输出还包含|。转义这些管道,或使用其他分隔符。