2013-07-31 37 views
0

我试图构建一个bash代码行,在目录中为我找到一些文件。如何在Mac上使用`-regex`查找`

的(图像)的文件名是这样的:

yyyy-mm-dd_hh_mm_ss.xxx.jpg 

我想所有文件:

年份:2012,月份:02-12,时间:08:00-16:00

的Theres为2012年

所有天数的一天的每一分钟内,文件我尝试以下下手,但它并没有发现任何东西:

find . -regex './2012-11-11_(0[8-9]|1[0-6])_*_*.*.jpg' | wc -l 

我需要更改11-11以匹配所有的日子,我知道,但是在匹配时间时已经卡住了。

我一直在阅读的地方,我需要指定-regextype posix-extended,但它不知道这个选项,并没有在手册中的替代品。

+0

不是严格的答案,但http://txt2re.com/index-cpcre.php3真的很适合构建棘手的正则表达式 –

+0

已收藏!谢谢! –

回答

1

你很困惑regexpshell globbing

更换*.*(或更好,具有\d{2} - 两位数字),则.\.(如.手段任何字符)等

阅读一些正则表达式的文件将是巨大的。

+0

这是@anubhava发布的正确的正则表达式的解释,因为你是第一个,这是更多的学习,我将这个标记为正确的答案。 ;) –

2

使用这个表达式基于找到OSX:

find -E . -regex '\./2012-(0[2-9]|1[0-2])-[^-]+_(0[8-9]|1[0-6])_.*\.jpg' 
+0

差不多,我想你在'[12]'中有一个错字,它缺少一个破折号。除此之外,它就像一个魅力!谢谢! –

+1

我有'1 [12]'匹配月'11'和'12' – anubhava

+0

哦,等等,它匹配'1'和'2' ..所以不需要一个范围!我的错! –

1

我觉得这不是企业与正则表达式。您只需要在两个时间戳之间找到文件,以便您可以触摸两个文件,将这两个文件的修改时间更改为2012-02-01和2012-12-01。

然后使用“find -cnewer file1 and!-cnewer file2”找出你需要的文件。也可以使用-cmin -ctime。