名前のあるファイルがあるとします:
batman.c
debate.c
cricketbat.c
Searchtag bat
を使用してこれらのすべてのファイルをリストするには、どのコマンドをどのように使用する必要がありますか?
bat
を使用してファイルを検索する名前にbat
が含まれる/path/to/folder
内のすべてのファイルを検索するには、次を使用できます。
find /path/to/folder -name '*bat*'
quoted 検索パターン*bat*
があります。なぜなら、引用符が省略され、ファイルが現在のディレクトリの*bat*
と一致する場合、シェルは*bat*
をそれらのリストに展開し、thatを渡すためですfind
に。その後、find
は正しく機能しません。 (\*bat\*
および"*bat*"
も機能します。)
現在いるフォルダー(たとえば、cd
edのあるフォルダー)を検索するには、通常どおり.
を使用します。
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
は、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
およびその他のファイル検索方法の詳細については、以下を参照してください。
find
マニュアルページ 、オンラインまたは端末でman find
を実行してアクセスできます。find
、locate
、およびxargs
ユーティリティに関する詳細なドキュメントを提供します。最も簡単な方法は、実行することです
locate bat
この方法では、ファイル名に「bat」を含むファイルをコンピューター全体で検索できます
PC上のファイルのリストを更新するには
updatedb
アカウントに最近新しいファイルを追加したときにこのコマンドを実行します
ターミナルを開き、ディレクトリを検索を開始するディレクトリに変更してから、次のコマンドを実行します。
find . -name "*bat*" -type f
.
は、現在のディレクトリから検索コマンドを開始します。-name
は文字列bat
と一致し、大文字と小文字が区別されます。 (-iname
は大文字と小文字を区別しません)-type f
はファイルのみを検索します。
ファイルが現在のディレクトリにある場合:
$ 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 Shellスクリプトで正規表現を使用してファイルを検索する方法 をご覧ください
古き良き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.