通常、ファイル名に複数の部分文字列を同時に含むファイルを見つける必要があることがよくあります。 Bashでこれを行うにはどうすればよいですか?
たとえば、「linux.htmでBoostをqtに関連付ける方法」というファイルの「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*'
これらのパターンを引用しない場合は、まずシェルによって拡張されます。
いくつかの実装には大文字と小文字を区別しない一致のための/が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
ます。