Find
在目錄中搜尋文件
我正在嘗試搜尋給定特定字元串/正則表達式值的所有文件。因此,如果我要說搜尋名稱中包含“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
.