回答:
bat
どこでもファイルを見つける/path/to/folder
名前にが含まれるすべてのファイルを検索するにはbat
、次を使用できます。
find /path/to/folder -name '*bat*'
私がしている引用された検索パターンを*bat*
引用符を省略し、ファイルが一致した場合、ので、*bat*
現在のディレクトリに、シェルが拡大する*bat*
それらのリストにして渡すことにしますfind
。その後、find
正しく動作しません。(\*bat\*
そして"*bat*"
また働く。)
現在のフォルダー(cd
編集したフォルダーなど)を検索するに.
は、通常どおりを使用します。
find . -name '*bat*'
コンピューター全体を検索するには、を使用します/
。ホームディレクトリを検索するには、、~
またはホームディレクトリのフルネームを使用します。(シェルは~
、ホームディレクトリの完全修飾パスに展開されます。)
あなたはファイルを含むので、大文字と小文字を区別せずに検索する場合はBAT
、bAt
一致しているなど、及び、使用-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
であるか、オペレータが。
フォルダー、シンボリックリンク、および特殊なデバイスノードではなく、通常のファイルのみを検索するには、を使用できます-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
ファイルへの別のシンボリックリンクへのシンボリックリンクがある-xtype f
場合、その直接のターゲットが通常のファイルではなく別のシンボリックリンクであっても、それと一致します。これはほとんど常にあなたが望むものです。
多くの場合、人々は自分が欲しいと思う-type f
が、本当に欲しい-xtype f
。
find
を指定しない場合のデフォルトのアクションは-print
です。上記のすべてのコマンドは、次のコマンドと同等です。-print
最後に追加されです。
find
多くの場合、見つかったファイル(多くの場合、変更を行うコマンド)に基づいてコマンドを実行するために使用されます。ただし、結果を表示することを目的とする他のアクションもあります-print
。特に興味深いのは-ls
:
find /path/to/folder -name '*bat*' -ls
これにより、各ファイルの詳細情報が、複数列形式で表示されます。これは、を実行することで表示される内容と似ています(まったく同じではありません)。ls file
詳細についてはfind
ファイルを検索する方法およびその他、以下を参照してください。
find
マニュアルページ、オンラインでアクセスまたは実行することによりman find
、端末で。find
、locate
、およびxargs
ユーティリティ。-xtype
アドバイス。おそらくls *bat*
および-maxdepth
/ mindepth
も言及する価値があります。
最も簡単な方法は、実行することです
locate bat
このようにして、ファイル名に「bat」を含むファイルをコンピューター全体で検索できます
PC上のファイルのリストを更新するには
updatedb
アカウントに最近新しいファイルを追加したときにこのコマンドを実行します
updatetdb
updatedb
最後に手動または自動で最後に実行されたものより新しいファイル)を見つけるには、sudo updatedb
最初に実行する必要があります(はい)。
bat
。
find /
としてlocate
ながら、データベースから検索しfind
、再帰的にリストし/
た後とは、正規表現にマッチします。
ファイルが現在のディレクトリにある場合:
$ 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
find
コマンドを使用し、-iname
大文字と小文字を区別しないファイル名の一致-name
オプション、または大文字と小文字を区別するファイル名の一致オプションを使用します。どちらもワイルドカード名を使用できます。したがって、「bat」を含むファイル名を見つけるには、次を使用します。
find / -iname '*bat*'
または
find / -name '*bat*'
これ*
は「任意の文字」を意味するため、検索は、そのbat
前後の任意の文字(なしを含む)で検索します。/
ルートディレクトリから検索が再帰的に、あなたが使用することができ.
、現在のディレクトリ、またはあなたから検索したい場所を絶対パスから再帰的に検索しますました。Linuxシェルスクリプトで正規表現を使用してファイルを検索する方法を見てください
-type f
より簡単にディレクトリを除くより行い、ある、ユーザーが本当に欲しいものが多いではないが。
古き良きを使用し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.