我拼命地試圖編寫一個模式尋找命令,但它永遠不會工作。我想搜索所有*.txt
和*.h
文件:BASH:如何正確使用模式與查找
find . -name "*(*.h|*.txt)"
find . -name "(*.h|*.txt)"
find . -name *(*.h|*.txt)
find . -name "*\(*.h|*.txt\)"
find . -name '*("*.h"|"*.txt")'
我拼命地試圖編寫一個模式尋找命令,但它永遠不會工作。我想搜索所有*.txt
和*.h
文件:BASH:如何正確使用模式與查找
find . -name "*(*.h|*.txt)"
find . -name "(*.h|*.txt)"
find . -name *(*.h|*.txt)
find . -name "*\(*.h|*.txt\)"
find . -name '*("*.h"|"*.txt")'
在這裏你去:
find . -name '*.h' -o -name '*.txt'
如果你有不只是名字多種條件,例如修改時間不到5天,那麼你最想組的多個名稱的條件下,這樣的:
find . -mtime -5 \(-name '*.h' -o -name '*.txt' \)
這樣,你的條件爲「TIME AND(NAME1 OR NAME2)」,沒有分組將是「時間和名稱1或NAME2」,這是不一樣的,因爲後者將是非常的評估「(時間和名稱1)或名稱2" 。
嗯,這取決於你想要做什麼,只記得,當你使用OR條件這樣,你可能需要使用\(... \)
分組在上面的例子。
UPDATE
如果你的的find
版本支持-regex
標誌,那麼另一種解決方案:
find . -regex '.*\.\(txt\|h\)'
我覺得這更像是你要找的人;-)
儘管-name pattern
中的圖案可以匹配像*
,?
和這樣的常規殼模式,看起來它們不能匹配extended patterns,即使extglob
已啓用。
使用該表達式:
find . -type f \(-name "*.h" -or -name "*.txt" \)
-type f
剛剛找到的文件。-name \(logical condition \)
只是與您指定的文件擴展名匹配。
是的,我正在等待這個。我仍然不知道爲什麼我不能使用[模式匹配](http://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html),但這至少給我一個很好的關於這種新的邏輯表達式的想法。 – Mazyod
@Mazyod好點。看到我更新的答案。 – janos