Find
查找:名稱中的正則表達式
假設我寫:
find . -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"
這個命令在我看來應該可以工作。我已經遍歷了各種 regextype 選項和各種 regex 格式,但無法通過 find 讓這種 regex 工作。關於 find 和正則表達式解析器,我在這裡有什麼簡單的錯誤嗎?
Find’s
-name
不採用正則表達式(這在問題的原始版本中使用過)。它需要 shell glob,這不是一個有效的 shell glob。您想使用-regex
測試,但還需要告訴它使用擴展的正則表達式或任何其他能夠理解{N}
和foo|bar
符號的風格。最後,與 不同-name
的是,-regex
測試會查看整個路徑名,因此您需要這樣的內容:$ find . -regextype posix-extended -regex ".*/[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n" 5678-34-56-bar.csv.gz 1234-12-12-foo.csv.gz
如果你想使用
-name
,你可以這樣做:find . \( \ -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-foo.csv.gz" \ -o -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-bar.csv.gz" \ \) -printf "%f\n"