2010-12-08 39 views
0

我有一個包含一堆人圖像的目錄。不幸的是,圖像來自的系統具有自己獨特的ID,用於許多人物圖像,這些圖像在業務中的任何其他系統中都沒有使用(例如,客人有圖片但實際上並不在僱員/客戶數據庫中... 。只是在圖片服務器的存儲)。幸運的是,8個或更多的整數後跟一個擴展名的圖片是不需要的(我見過.bmp和.jpg ......但可能有其他的)。在使用rm -f替換ls -lh並將腳本移除其他系統的照片之前,我已嘗試將以下find命令作爲測試。我猜測我誤解了正則表達式,因爲通常情況下,但我看起來無處不在的情況下,似乎下面的內容應該適用於我正在尋找的內容。 \ d {8,}似乎沒有工作,因爲刪除它發現一切都很好,但我不想要一切......只是那些有8個或更多的整數,然後是什麼。我在這裏忽略了什麼?使用-regex和-exec查找命令,需要正則表達式幫助

find /path/to/dir -regex '\/path\/to\/dir\/\d{8,}.*' -exec ls -lh {} \; 

謝謝。

回答

4

我不知道find正則表達式類型是系統特定的。我在Linux中看到它有幾種類型的正則表達式(POSIX與Emacs不同)。似乎find中的默認正則表達式類似於emacs。我見過find也有-regextype選項,因此,使用posix-extended你可以得到類似於你想要的東西:

find /path/to/dir -regextype posix-extended -regex '/path/to/dir/[0-9]{8,}.*' -exec ls -lh {} \; 

,但你不必對這些類型的正則表達式的\d(我覺得他們僅來自Perl類型的正則表達式),並且不需要反斜槓/。無論如何,這些作品。

+0

非常感謝。在寒冷的冬天,我應該找一本好書在壁爐旁讀正規表達。在寒冷的天氣期間,讀一本關於正則表達式的書,感受溫暖的更好的方式是什麼? – wilbbe01 2010-12-08 19:29:37