根据文件中的日期字符串设置mtime

时间:2012-07-19 11:42:26

标签: bash touch

这是一个类似于this one的问题。

但我不擅长shell脚本,所以我仍然想请你帮忙......

我的情况略有不同:日期字符串在文件中。

这些文件(超过700个)被命名为msg00000.html到msg00721.html。每个人都有这样的一行:

<li><em>Date</em>: Thu, 22 Jul 2010 00:44:57 +0800</li>

经过大量的谷歌搜索后,我终于发现了它们:

grep "<li><em>Date" msg00000.html | cut -d' ' -f2-7 | tr -d "</li>"

输出正是我想要的:

Thu, 22 Ju 2010 00:44:57 +0800

我知道使用touch -md "Thu, 22 Ju 2010 00:44:57 +0800" msg00000.html可以修改mtime。

然而,有人可以帮我把它们组合在一起吗?并为723个文件执行此操作...

...谢谢

修改

好吧,我终于想出了如何:

for f in *.html; do touch -md "$(grep '<li><em>Date' $f | cut -d' ' -f2-7 | sed 's/<\/li>//')" "$f"; done

这是一个很长的命令......

实际上问题出在tr命令中。它在使用-d时删除所有字符,而不是模式。所以日期Thu, 22 Ju 2010 00:44:57 +0800是错误的。它应该是Thu, 22 Jul 2010 00:44:57 +0800。是的,有一个&#34; l&#34;遗失,已由tr -d删除。 LOL。

1 个答案:

答案 0 :(得分:3)

for i in {0..721}; do touch -md "`grep '<li><em>Date' $(printf 'msg%05d.html' $i) | sed -e 's#<[^>]*>##g' | cut -d' ' -f2-7`" $(printf 'msg%05d.html' $i); done

我确信很快就会出现一位awk大师向我们展示如何以20个字符进行操作,但这应该可以解决问题。

编辑:记住,孩子们,重要的是要睡一觉,而不是试图回答互联网上的问题。你不想最终发布这样荒谬的答案,是吗?