Find

在目錄中搜尋文件

  • August 18, 2016

我正在嘗試搜尋給定特定字元串/正則表達式值的所有文件。因此,如果我要說搜尋名稱中包含“hello”的所有文件,我將如何執行此操作?更複雜的是,我將如何查找名稱以任意兩個字母后接破折號和數字開頭的文件?

我已經嘗試了 find 命令,這在你好的情況下有所幫助。我只想輸入find <dir> *hello*,但這不適用於正則表達式值。

如果我鍵入find -E <dir> -regex '^[a-z]{2}-[1-9]'沒有任何反應。即使我輸入find -E <dir> -regex '*[0-9]*',也沒有任何反應。

有人可以幫我解決這個問題嗎?提前致謝

-regex匹配整個文件路徑(不僅僅是名稱),並且預設錨定(^$隱式)。

在這裡,您不需要正則表達式,您可以使用-name採用萬用字元模式並匹配文件名而不是路徑的標準:

find . -name '*hello*' -name '[[:alpha:]][[:alpha:]]-[1-9]*'

對於以 2 個字母、一個連字元和一個 1 到 9 的數字開頭並包含“hello”的文件名。

使用正則表達式,在這裡使用 FreeBSD/OS/X find,那必須是:

find -E . -regex '.*hello[^/]*' -regex '.*/[[:alpha:]]{2}-[1-9][^/]*'

您需要[^/]*而不是.*其他方式,例如,這將匹配./aa-9/hello/foo/bar

無論如何,find <dir> *hello*不做你認為它做的事。shell 將該*hello*glob 擴展為目前目錄中名稱包含“hello”的非隱藏文件或目錄的列表,並將結果作為額外參數傳遞給find.

引用自:https://unix.stackexchange.com/questions/303902