按特定日期查找文件并搜索电话号码

3

我已经完成了这个指令的一半。最终我会在一个PHP网站中实现它,如果能将其压缩到一行就更好了!

这是我想要做的事情:查找特定日期的压缩文件,然后grep电话号码1234567890。目前我拥有的指令是:

find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00'

结果如下:
 ./1006AC1.ACT.gz
 ./1006AC3.ACT.gz
 ./1006AC4.ACT.gz
 ./1006AC0.ACT.gz
 ./1006ABF.ACT.gz
 ./1006AC5.ACT.gz
 ./1006AC2.ACT.gz

这很好!但是,这也是我卡住的地方。每一个文件都包含大量记录,为了搜索这7个压缩文件,我通常只需要:

gunzip -c 1006A* |grep 1234567890

但我正在尝试将这两个命令合并为一个。这是我一直在探索的方向:

 find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' |xargs gunzip -c * | grep 1234567890

很不幸,我尝试了这个和其他变体,要么什么都没有搜索到,要么就是全都搜索到了。我无法让它只在输出的7个文件中搜索。
作为备选方案,我的另一个想法(因为目标是将其实现到PHP站点上)是运行第一个命令,然后尝试使用正则表达式查找匹配的文件。 在这种情况下:1006A
然后,我会将其封装在一个变量中,并发送类似于以下内容的第二个命令:

 gunzip -c $compressed |grep 1234567890


我的困难在于取出7个文件中相似的字母/数字并输出。感谢任何帮助!Jared

1个回答

3
使用zgrep命令:
find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' | xargs zgrep 1234567890

zgrep就像grep一样,但可以理解压缩文件。

附加说明

在你的试用命令中,请注意xargs gunzip -c之后的星号:

find . -newermt '2014-04-30 08:00:00' -not -newermt '2014-04-30 09:00:00' |xargs gunzip -c * | grep 1234567890

Shell会将星号*扩展为当前目录中的所有文件名。这不是你想要的,很可能是你在命令中获得意外结果的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接