使用不同的 and/or 条件查找 Shell
Find with Shell with different and/or conditions
我正在尝试根据不同条件在目录中查找文件或文件夹:
- 所有以 W 或开头的文件,
- 所有以 X 或
结尾的文件
- 所有以 Y 开头以 Z 结尾的文件!
到目前为止,这是我最好的选择:
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'
尽管重复遍历可能会多次报告同一个文件。但是你想避免这种情况并且只遍历目录树一次,因为这可能是一项非常繁重的操作。
我正在尝试根据不同条件在目录中查找文件或文件夹:
- 所有以 W 或开头的文件,
- 所有以 X 或 结尾的文件
- 所有以 Y 开头以 Z 结尾的文件!
到目前为止,这是我最好的选择:
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'
尽管重复遍历可能会多次报告同一个文件。但是你想避免这种情况并且只遍历目录树一次,因为这可能是一项非常繁重的操作。