2013-07-31 40 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。