web-dev-qa-db-ja.com

ワイルドカードの一致に基づいて、現在およびサブフォルダー内のすべてのファイルを再帰的に見つける方法はありますか。

ワイルドカードの一致に基づいて、現在およびサブフォルダー内のすべてのファイルを再帰的に見つける方法はありますか。

1491
john

そのためには find を使用してください。

find . -name "foo*"

findは開始点を必要とし、.(ドット)は現在のディレクトリを指します。

2081
tux21b

Grepへのfindのパイピングはしばしばより便利です。それはあなたに任意のワイルドカードマッチングのための正規表現のフルパワーを与えます。

たとえば、ファイル名に大文字と小文字を区別しない文字列 "foo"を含むすべてのファイルを検索するには、次のように入力します。

~$ find . -print | grep -i foo
182
Paul Whipp

findはパターンにマッチするすべてのファイルを見つけます。

find . -name "*foo"

しかし、あなたが写真が欲しいならば:

tree -P "*foo"

お役に立てれば!

118
IslandCow

あなたのシェルが 新しいグロビングオプション をサポートしている場合:/(shopt -s globstarで有効にすることができます)、あなたは以下を使うことができます。

echo **/*foo*

再帰的にファイルやフォルダを見つけること。これはBash 4、zsh、および類似のシェルでサポートされています。


個人的に私はこのシェル関数を定義しました:

f() { find . -name "*$1*"; }

注:上の行はシェルに直接貼り付けることも、ユーザーの~/.bashrcファイルに追加することもできます。

それから私はタイプすることによってどんなファイルでも探すことができます:

f some_name

あるいは、 fdユーティリティ を単純な構文で使うことができます。 fd pattern

21
kenorb
find -L . -name "foo*"

場合によっては、シンボリックディレクトリリンクを処理するために-Lパラメータが必要です。デフォルトでは、シンボリックリンクは無視されます。そのような場合は、ディレクトリをサブディレクトリに変更してファイルがパターンに一致するのを確認しても、findがファイル名を返さないため、混乱します。 -Lを使用するとその問題は解決します。 findのシンボリックリンクオプションは-P -L -Hです。

21
toddcscar
find <directory_path>  -type f -name "<wildcard-match>"

ワイルドカードマッチでは、マッチしたい文字列を指定することができます。 * .c(すべてのcファイル用) 

20
P_Jain

fd

findが遅すぎる場合は、fdユーティリティを試してください。これは、Rustで書かれたfindに代わる単純で高速な方法です。

構文:

fd PATTERN

デモ:

ホームページ: https://github.com/sharkdp/fd

12
kenorb

あなたが使用することができます:

# find . -type f  -name 'text_for_search'

REGEXを使いたい場合は-inameを使ってください。

# find . -type f  -iname 'text_for_search'
8
user8848899

再帰的なファイルを検索するデフォルトの方法で、ほとんどの場合に利用可能です

find . -name "filepattern"

現在のディレクトリ内から、ファイル名またはパターンの再帰的な走査を開始します。 findコマンドを使用すると、ワイルドカードとさまざまなスイッチを使用して、オプションの完全なリストを表示できます。

man find

または、システムでマニュアルページが利用できない場合

find --help

ただし、ファイルシステム全体を走査し、ファイルのインデックスを作成する、よりモダンで高速なツールがあります。そのような一般的なツールの1つは、locateまたはslocate/mlocateです。OSのマニュアルでインストール方法を確認してください。インストールされた場合、データベースを開始する必要があります。インストールスクリプトが実行しない場合は、次のように入力して手動で実行できます。

Sudo updatedb

そして、特定のファイルタイプを探すためにそれを使用するには

locate filename

または、現在のディレクトリ内からファイル名またはパターンを検索するには、次のように入力します。

 pwd | xargs -n 1 -I {} locate "filepattern"

ファイルのデータベースを調べ、入力したパターンに一致するパス名をすばやく出力します。 Locateのオプションの完全なリストを表示するには、locate --helpまたはman locateと入力します

さらに、cronジョブを介してスケジュールされた時間にデータベースを更新するようにロケートを構成できるため、午前1時にdbを更新するサンプルcronは次のようになります。

0 1 * * * updatedb

Updatedbはファイルシステム全体を走査するためにroot権限を必要とするため、これらのcronジョブはrootで設定する必要があります。

7

ファイル検索用
find / -xdev -name settings.xml - >コンピュータ全体
find ./ -xdev -name settings.xml - >現在のディレクトリとそのサブディレクトリ

拡張子タイプのファイル用

find . -type f -name "*.iso"
2
Alberto

以下のコマンドはどんなファイルでも検索するのに役立ちます 

1)事件に関係なく
2)結果許可なくフォルダを除外した場合
3)ルートから、または好みのパスから検索します。 /を好みのパスに変更してください。 

構文:  
find -iname '' 2>&1 | grep -v "パーミッションが拒否されました"


検索/名前 'C * .xml' 2>&1 | grep -v "パーミッションが拒否されました"

find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"
1
MukeshKoshyM

次のコマンドは、現在のフォルダとそのサブフォルダにある、正確な名前「パターン」を持つすべてのファイルを一覧表示します。 

find ./ -name "pattern"

1
anshul

これは現在のディレクトリとサブディレクトリにあるすべての関連ファイルを検索し、行数を別々に計算します。

find . -name "*.wanted" | xargs wc -l
0
Jay Yang

ワイルドカードを使って特殊ファイルを検索したい場合は、次のコードを使用できます。

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

ここからすべての.confファイルを検索したいとします。 

.はここから検索を開始することを意味します(現在の場所)
-typeは、ここではファイル(f)である検索項目のタイプを意味します。
-nameは、 * .conf の名前でファイルを検索したいという意味です。

0
Reza Harasani