web-dev-qa-db-ja.com

名前の一部のみを検索してファイルを検索するコマンド?

名前のあるファイルがあるとします:

batman.c
debate.c
cricketbat.c

Searchtag batを使用してこれらのすべてのファイルをリストするには、どのコマンドをどのように使用する必要がありますか?

31
srk_cb

どこでもbatを使用してファイルを検索する

名前にbatが含まれる/path/to/folder内のすべてのファイルを検索するには、次を使用できます。

find /path/to/folder -name '*bat*'

quoted 検索パターン*bat*があります。なぜなら、引用符が省略され、ファイルが現在のディレクトリの*bat*と一致する場合、シェルは*bat*をそれらのリストに展開し、thatを渡すためですfindに。その後、findは正しく機能しません。 (\*bat\*および"*bat*"も機能します。)

現在いるフォルダー(たとえば、cdedのあるフォルダー)を検索するには、通常どおり.を使用します。

find . -name '*bat*'

コンピューター全体を検索するには、 /を使用 。ホームディレクトリを検索するには、~、またはホームディレクトリのフルネームを使用します。 ( シェルは~を展開します はホームディレクトリの完全修飾パスになります。)

名前に基づいて検索を拡大または絞り込む

大文字と小文字を区別せずに検索する場合、BATbAtなどを含むファイルが一致するようにするには、-inameテストの代わりに-nameテストを使用します。

find /path/to/folder -iname '*bat*'

すべてのファイルが.cで終わることに気付きました。そのようなファイルのみを検索する場合は、次を使用します。

find /path/to/folder -name '*bat*.c'

すべてのファイル名のbatが、.cサフィックスの前の部分の先頭または末尾にあることに気付きました。 embattled.cのようなファイルの一致を避けたい場合は、次を使用できます。

find /path/to/folder -name '*bat.c' -o -name 'bat*.c'

-oは、or演算子です。

ファイルのみの一致

通常のファイル -のみを検索し、フォルダー、シンボリックリンク、および特殊なデバイスノードを検索しない場合は、-type fを使用できます。これは頻繁に推奨され、時には非常に適切です...しかし、しばしばあなたが本当に望むものではありません、特にあなたがfindを実行している場合、自分で出力します。 シンボリックリンク が検索に一致した場合、それについて知りたくありませんか?

通常のファイルとシンボリックリンクの両方を検索する場合は、次を使用できます。

find /path/to/folder -name '*bat*' \( -type f -o -type l \)

-o演算子を使用し、グループ化のために括弧も使用します(シェルがそれらを特別に処理しないように引用符で囲む必要があります。そうしないと、構文エラーが発生します)。

しかし、最終的には通常のファイルを指すシンボリックリンクのみを表示する必要があるとします(ディレクトリ、デバイスノードなどへのシンボリックリンクは表示しない)。それは実際にはさらに簡単です:-xtypeの代わりに-typeを使用します。 find-Lフラグ付きで実行していない場合、シンボリックリンクで-xtypeはリンクが指すファイルのタイプをテストします。

find /path/to/folder -name '*bat*' -xtype f

ファイルへの別のシンボリックリンクへのシンボリックリンクがある場合、そのdirectターゲットが通常のファイルではなく別のシンボリックリンクであっても、-xtype fはそれと一致します。これはほとんど常にあなたが望むものです。

多くの場合、人々は-type fが欲しいと思うが、実際には-xtype fが欲しいと思う。

詳細な出力の取得

指定しない場合のfindのデフォルトアクションは-printです。上記のすべてのコマンドは、最後に-printが追加されたコマンドと同等です。

findは、検出されたファイル(多くの場合、変更を行うコマンド)に基づいてコマンドを実行するために使用されます。ただし、-printの他に、結果を表示することを目的とする他​​のアクションもあります。特に興味深いのは-lsです。

find /path/to/folder -name '*bat*' -ls

これにより、ls fileを実行することで表示されるものと似ていますが、各ファイルの詳細情報が複数列形式で表示されます(まったく同じではありません)。

さらに読む

findおよびその他のファイル検索方法の詳細については、以下を参照してください。

47
Eliah Kagan

最も簡単な方法は、実行することです

locate bat

この方法では、ファイル名に「bat」を含むファイルをコンピューター全体で検索できます

PC上のファイルのリストを更新するには

updatedb

アカウントに最近新しいファイルを追加したときにこのコマンドを実行します

16
Mark Kirby

ターミナルを開き、ディレクトリを検索を開始するディレクトリに変更してから、次のコマンドを実行します。

find . -name "*bat*" -type f 

.は、現在のディレクトリから検索コマンドを開始します。
-nameは文字列batと一致し、大文字と小文字が区別されます。 (-inameは大文字と小文字を区別しません)
-type fはファイルのみを検索します。

14
karel

ファイルが現在のディレクトリにある場合:

$ ls *bat*
batgirl.c  batman.c  batwoman.c  cricketbat.c

または(1行ずつ表示するには):

$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c

そのファイルをシステムで検索する場合は、次を使用します。

$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
6
chaos

findコマンドを使用し、大文字と小文字を区別しないファイル名の一致には-inameオプションを、大文字と小文字を区別するファイル名の一致には-nameオプションを使用します。どちらもワイルドカード名を使用できます。したがって、「bat」を含むファイル名を見つけるには、次を使用します。

find / -iname '*bat*'

または

find / -name '*bat*'

*は「任意の文字」を意味するため、検索は、その前後の任意の文字(なしを含む)でbatを探します。 /はルートディレクトリから再帰的に検索します。現在のディレクトリから再帰的に検索する.、または検索元の絶対パスを使用できます。 Linux Shellスクリプトで正規表現を使用してファイルを検索する方法 をご覧ください

4
AJefferiss

古き良きfindを使用します。

find <path_for_search> -type f -iname "*bat*" 

例えば。:

% find . -type f -iname "*bat*" 
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c

man findから:

-type c
          File is of type c:
          [..]
          d      directory
          [..]
          f      regular file
          [..]

-iname pattern 
          Like -name, but the match is case insensitive.
2
A.B.