巨大なディレクトリ階層でファイル “WSFY321.c”を探しています。
通常は GNU find :find . -name "WSFY321.c"
ただし、大文字と小文字、または両方の組み合わせである可能性があります。
このファイルを見つける最も簡単な方法は何ですか?
find . | grep -i "WSFY321.c"
よりも優れたものはありますか?
回答
最近のバージョンのGNU find
には、大文字と小文字を区別しない名前検索用に-iname
フラグがあります。
find . -iname "WSFY321.c"
コメント
回答
GNU find、またはそれを含む他のバージョンのfindの場合:
find . -iname "WSFY321.c"
他のバージョンの場合:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
または、入力が遅くても入力しやすい妥協案:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
またはzshの場合:
print -rl -- **/(#i)WSFY321.c
コメント
- @Gilles
grep
バージョンは大文字のみをフィルタリングしており、' t ' [^ /] ' ..(not /) - @Gillesを理解する最初のケース(正確なファイル名)では、引用符をまったく使用せずに一重引用符を使用しますか?
- @ Peter.O iv id = “f42569d736の後に
*
はありません”>
はbashバージョンです。私はgrep -i
を意味しました。名前がWSFY
divで始まるディレクトリ内のファイルをキャッチしないように、.*
ではなく[^/]*
を設定します。 >。
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… 'が nocaseと呼ばれる理由だと思います glob :globのコンテキストでのみ機能します(またはそう思われます)。回答
macOSの2つのソリューション:
GNU find
の使用:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
GNU sed
の使用:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
コメント
- macOS Sierraでは、デフォルトで-inameオプションを使用できます。
-type f
フラグを使用して、おそらくさらに2、3ティックを削り、' iノードがディレクトリの場合は、わざわざ名前を確認してください。ただし、'の最適化のペダンティックレベル…find . -iname \*WSFY321.c\* -type f
<を実行できます。 / li>