查找包含多个单词的文件,其中单词的顺序无关紧要

查找包含多个单词的文件,其中单词的顺序无关紧要

我有一个巨大的文件夹,其中有很多子文件夹,我想在其中搜索包含三个单词的文件夹。请注意,文件夹名称需要包含全部三个单词,但单词的顺序并不重要。

示例:我想查找包含单词APEBanana和 的文件夹Tree

find folder -name '*APE*Banana*Tree*'

但是,此命令将考虑单词的顺序,虽然这并不有趣,但我想以任何顺序查找包含这些单词的任何文件夹。

答案1

只需使用 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/)

/ 全局限定符相当于find选择目录-type d类型的文件d

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与上面关于尾随的注释相同/

在哪里:

相关内容