这是一个类似于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。
答案 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个字符进行操作,但这应该可以解决问题。
编辑:记住,孩子们,重要的是要睡一觉,而不是试图回答互联网上的问题。你不想最终发布这样荒谬的答案,是吗?