使用find和grep不隔离文件



我有一系列文件,如下所示:

image-seq 2020-04-13-05-50-00.jpg 
image-seq 2020-04-13-06-00-00.jpg
...
image-seq 2020-04-13-16-50-00.jpg
image-seq 2020-04-13-17-00-00.jpg

我试图将时间从17:00到第二天05:50的文件分开(因此只应返回示例中的第一个和最后一个文件名(。我想我可以使用find和grep来隔离文件,然后mv它们,但不应该出现的文件会显示在结果输出中。

我正在使用macOS grep,所以我不确定这是否是问题所在。

我尝试的命令是:

find . -type f -name *.jpg -exec grep -E '-1[7-9]|2[0-3]|0[0-5]-d{2}-d{2}.jpg' {} ;

我不确定我做错了什么,但如果你有什么建议,那就太好了。

在macOSfind上,您可以使用此命令使用-E-iregex选项获取匹配的文件:

find -E . -iregex '.*(-1[7-9]|2[0-3]|0[0-5])(-[0-9]{2}){2}.jpg'
./image-seq 2020-04-13-05-50-00.jpg
./image-seq 2020-04-13-17-00-00.jpg

不使用-exec grep在文件内部搜索,而是使用管道find | grepfind打印的文件名列表内部搜索。

然后,您还必须调整正则表达式。使用-a|b|c-搜索-abc-。您可能指的是搜索-a--b--c--(a|b|c)-

find . -type f -name *.jpg | grep -E -e'-(1[7-9]|2[0-3]|0[0-5])-..-...jpg'

然而,为fitlering数字范围编写正则表达式是很累的,而且容易出错。正如您可能知道的,上面的regex不会检查分钟数。您可能需要切换到awk

find . -type f -name *.jpg | awk -F- '$5>=17 || $5<5 || $5==5 && $6<=50'

最新更新