查找名称同时包含给定子字符串的文件

查找名称同时包含给定子字符串的文件

一般来说,经常需要找到一个文件名同时包含多个子字符串的文件。我该如何用 bash 做到这一点?

例如,名为“How to link boost with qt under linux.htm”的文件中的“boost”、“qt”和“linux”

PS 最后,我设法使用以下方法找到该文件:

find . -name *boost* | xargs find . -name *Qt*

但首先它给出了这样的抱怨:

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
find: paths must precede expression

所以,我仍在寻找一些更清晰的解决方案。

PS Stéphane Chazelas 的解决方案有所帮助。问题出在“boost”中的大字母“b”,所以我应该让这个查找不区分大小写:

find . -iname '*boost*' -iname '*qt*'

答案1

find /some/path -name '*boost*' -name '*Qt*'

或者匹配完整路径:

find /some/path -path '*boost*' -path '*Qt*'

如果您不引用这些模式,它们将首先由您的 shell 扩展。

对于不区分大小写的匹配,某些find实现具有-iname/ -ipath。否则,您始终可以执行以下操作:

find /some/path -name '*[bB][oO][oO][sS][tT]*' -name '*[qQ][tT]*'

或者,假设文件路径不包含换行符:

find /some/path |
  awk -F/ '{lname=tolower($NF)}; lname ~ /boost/ && lname ~ /qt/'

答案2

使用find /some/path -name "*boost*" -a -name "*qt*"

意思-a是“与”寻找。

相关内容