2012-12-20 44 views
0

我很新,發現正則表達式對我來說一直很棘手。我希望有人能迅速糾正這對我來說,甚至告訴我,這是爲什麼不這樣做,我認爲它應該(排除某些類型的文件是目標):提前在查找中排除文件類型的正則表達式

find . -type f \(-name "*" ! -name "*\.(vm | jar | class | htm | html | jpg | gif)$" \) 

感謝。

+0

爲什麼 - 名稱「*」,然後第二個模式?不是-not -name「* \。(vm ...」足夠嗎? –

+0

http://stackoverflow.com/questions/6844785/how-to-use-regex-with-find-command –

回答

2

貌似問題是關於Unix外殼...

無論如何,在正則表達式的一面,我知道更好,我想你必須刪除你在你的表達有空格:

"\.(vm|jar|class|html?|jpg|gif)$" 

我不保證你的命令本身的有效性...

+0

不是100%正確,那麼file:'handjar'它沒有擴展名,但仍然會匹配 – Tomek

+0

好評,我編輯...謝謝,甚至不知道如果'find'完成匹配或匹配的任何地方。在第一種情況下,你的答案更好。 – PhiLho

+0

是的,現在有道理,謝謝。 – Nik

2

我不熟悉find命令的語法,而是要配合定擴展名的文件,你將需要:

".*\.(vm|jar|class|htm|html|jpg|gif)$" 

刪除空間,並在開始添加點。

1

我敢肯定找到查找默認爲每名,所以你額外的「-name‘*’」在這裏沒有必要。

在正則表達式的一面,看起來你已經找到你要找的答案,但你可能仍然想知道找到OR標誌(-or或-O),可以使事情正則表達式時給你造成的麻煩更容易:

find . -type f ! \(-name "*.vm" -o -name "*.jar" -o -name ".class" \) 

不利的一面,這顯然是更長的時間來寫......

記得看一看man find

祝你好運