巨大なディレクトリ階層でファイル “WSFY321.c”を探しています。
通常は GNU find find . -name "WSFY321.c"
ただし、大文字と小文字、または両方の組み合わせである可能性があります。

このファイルを見つける最も簡単な方法は何ですか?
find . | grep -i "WSFY321.c"よりも優れたものはありますか?

回答

最近のバージョンのGNU findには、大文字と小文字を区別しない名前検索用に-inameフラグがあります。

find . -iname "WSFY321.c" 

コメント

  • また、'特にファイルを探している場合は、-type fフラグを使用して、おそらくさらに2、3ティックを削り、' iノードがディレクトリの場合は、わざわざ名前を確認してください。ただし、'の最適化のペダンティックレベル…
  • 一部の正規表現を操作するには、find . -iname \*WSFY321.c\* -type f <を実行できます。 / li>

回答

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.*ではなく[^/]*を設定します。 >。

  • @BernhardConsistency。
  • ありがとうGilles:間違った構文で前のコメントを削除し、修正されたバージョンをテストしましたが、' tは*なしで機能します(予期しない理由で;少なくとも私には)。大文字と小文字を区別しないオプションは機能しなくなりました: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オプションを使用できます。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です