使用不同的 and/or 条件查找 Shell

Find with Shell with different and/or conditions

我正在尝试根据不同条件在目录中查找文件或文件夹:

到目前为止,这是我最好的选择:

find -name 'w*' || find -name '*x' || 'find -name 'y*' & find -name '*z!'

这显然不起作用。显然没有错误消息,只是它没有找到我要查找的所有文件。

您可以使用 -o 指定多个谓词以对它们进行 OR。

find -name 'w*' -o -name '*x' -o -name 'y*z'

同样,您可以使用单个 -regex 来捕获所有这些条件。

find -regex '.*/\(w[^/]*\|[^/]*x\|y[^/]*z\)'

(请注意 -regex 的参数如何应用于整个路径,以及与大多数现代正则表达式方言相比,开箱即用的正则表达式语法如何在一些奇怪的地方需要反斜杠。显然,正则表达式是不同的来自正则通配符;在正则表达式中,.* 匹配任何字符串,而 [^/]* 匹配不能是斜线的字符序列。这里的正则表达式语法适用于 GNU find 但是不是例如 MacOS / BSD find;尝试添加 -E 选项并删除 (|) 之前的反斜杠。)

不清楚您希望 || 做什么。如果第一个失败,它会 运行 第二个 find,但它不会(除非你给它无效的谓词或其他东西;找不到任何文件不是错误)。

更令人迷惑的是,& 运行后台作业;您可能正在寻找 &&,但它也无法满足您的要求。只需使用

就可以非常低效地完成您尝试的操作
find -name 'w*'
find -name '*x'
find -name 'y*z'

尽管重复遍历可能会多次报告同一个文件。但是你想避免这种情况并且只遍历目录树一次,因为这可能是一项非常繁重的操作。