0

这是一个与此类似的问题

但是我不擅长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。是的,缺少一个“l”,已被tr -d. 哈哈。

4

1 回答 1

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 个字符来做这件事,但这应该可以解决问题。

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

于 2012-07-19T12:08:50.397 回答