Find
查找包含多個單詞的文件,其中單詞的順序無關緊要
我有一個包含很多子文件夾的巨大文件夾,我想在其中搜尋包含三個單詞的文件夾。請注意,文件夾名稱需要包含所有三個單詞,但單詞的順序無關緊要。
範例:我想查找包含單詞 和 的
APE
文件Banana
夾Tree
。find folder -name '*APE*Banana*Tree*'
但是,此命令將考慮單詞的順序,而這並不重要,我想以任何順序找到包含這些單詞的任何文件夾。
只需使用 3
-name
秒:find folder -name '*APE*' -name '*Banana*' -name '*Tree*' -type d
請注意,就像您在模式中使用萬用字元的任何時候一樣
-name
,它可能會失去名稱包含在使用者區域設置中不構成有效字元的字元序列的文件。與
zsh
:set -o extendedglob # best in ~/.zshrc print -rC1 -- **/(*Banana*~^*APE*~^*Tree*)(ND/)
/
glob 限定符相當於find
’s-type d
來選擇d
irectory類型的文件。與
ksh93
:FIGNORE='@(.|..)' set -o globstar set -- ~(N)**/@(*Banana*&*APE*&*Tree*)/ (($# == 0)) || printf '%s\n' "$@"
ksh93
沒有 glob 限定符,但將 a 附加/
到 glob 會將擴展限制為目錄文件或目錄的符號連結。與
bash
:shopt -s globstar dotglob nullglob extglob set -- **/!(!(*Banana*)|!(*APE*)|!(*Tree*))/ (($# == 0)) || printf '%s\n' "$@"
ksh93
與上面關於尾隨的註釋相同/
。在哪裡:
D
,FIGNORE
,dotglob
確保隱藏文件也被報告(就像這樣find
做)N
,~(N)
,nullglob
使 glob 擴展為空,而不是在沒有匹配項時導致錯誤或擴展為自身globstar
使ksh93
/bash
理解 zsh 的**/
遞歸萬用字元。(x~^Y)
,@(X&Y)
,!(!(X)|!(Y))
是各自 shell 中匹配兩種模式的文件的三種方法。