web-dev-qa-db-ja.com

Unixで特定の拡張子を持つすべてのファイルを見つけますか?

ファイルがあります/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

私のハードドライブのどこかに* .jdkがあるかどうかを確認しようとしています。そこで、検索コマンドを実行します。

find . -name "*.jdk"

しかし、何も見つかりません。私が知っている人でさえありません。どうして?

50
Prostak

find .は、現在のディレクトリのみを検索します。他のディレクトリでファイルを検索する権限がある場合(ルートアクセス)、次を使用してファイルを見つけることができます-

find / -type f -name "*.jdk"

あなたが許可拒否メッセージのトンを取得している場合、あなたはそれを抑制することができます

find / -type f -name "*.jdk" 2> /dev/null
97
jaypal singh

a /

find .は、「検索(現在のディレクトリで開始)」を意味します。システム全体を検索する場合は、find /;を使用します。 /System/Libraryで検索するには、find /System/Libraryなどを使用します。

b /

ワイルドカードを単一引用符で囲む方が安全です。これを実行したときに、作業ディレクトリに* .jdkという名前のファイルがない場合、findは次のコマンドラインを取得します。

    find . -name *.jdk

ただし、実行時にcurrentディレクトリにファイルjunk.jdkおよびfoo.jdkがある場合、findは代わりに以下で開始されます:

    find . -name junk.jdk foo.jdk

…(2つあるため)混乱させ、エラーを引き起こします。その後、foo.jdkを削除して、まったく同じことを再度行うと、

    find . -name junk.jdk

…(_)1.6.0.jdkという名前のファイルは決して見つかりません。

このコンテキストでおそらく必要なのは、

    find /System -name '*.jdk'

…または、次のように*を「エスケープ」できます。

    find /System -name \*.jdk
11
BRPocock

おそらく、JDKは大文字であるか、OS Xで使用可能なfindのバージョンはデフォルトでは-printアクションが指定されていない場合。試してください:

find . -iname "*.jdk" -print

-iname のようなものです -nameただし、大文字と小文字を区別しない一致を実行します。 -printfindに結果を出力するように言います)

---編集---

@Jaypalが指摘したように、明らかにfind . ...ドライブ全体を検索する場合は、現在のディレクトリ(およびサブディレクトリ)のみを検索します。/検索パスとして。

6
Matteo Italia

「。」使用しているのは現在のディレクトリです。ホームディレクトリで起動している場合、おそらくJDKファイルが失われます。

最悪の場合の検索はルートから開始することです

 find / -name '*.jdk' -o -name '*.JDK' -print

それ以外の場合は、「/」をJDKファイルの親であることが確実なパスに置き換えます。

これがお役に立てば幸いです。

3
shellter

find/-type f -name "* .jdk"はMacでも動作します

1
Dajena