回答:
find . foo*
、それfoo*
は展開され、その後、検索に渡されます。
" "
再帰的な検索に非常に必要な強調する価値があります。
find . -name "foo*" 2>/dev/null
多くの場合、findをgrepにパイプする方が便利です。これにより、任意のワイルドカードマッチングのための正規表現を最大限に活用できます。
たとえば、ファイル名に大文字と小文字を区別しない文字列「foo」を含むすべてのファイルを検索するには、次のように入力します。
~$ find . -print | grep -i foo
find
また有し-iname
、-regex
および-iregex
そうするために、大文字小文字を区別しないワイルドカード、正規表現、および大文字と小文字を区別しない正規表現マッチングのためのフラグを配管することはgrep
不要です。
find
これらのオプションをサポートするコマンドが付属しているわけではないことを経験から知ることができます。時にはgrep
唯一のオプションになります。
find
パターンに一致するすべてのファイルを検索します。
find . -name "*foo"
ただし、画像が必要な場合:
tree -P "*foo"
お役に立てれば!
brew install tree
apt-get
インストールされていないMac OSXユーザー向け
find -L . -name "foo*"
いくつかのケースでは、シンボリックディレクトリリンクを処理するために-Lパラメータが必要でした。デフォルトでは、シンボリックリンクは無視されます。これらの場合、ディレクトリをサブディレクトリに変更して、パターンに一致するファイルを表示しても、findがファイル名を返さないため、非常に混乱しました。-Lを使用すると、この問題が解決します。findのシンボリックリンクオプションは-P -L -Hです。
シェルが新しいグロビングオプションをサポートしている場合(以下によって有効にするshopt -s globstar
ことができます)、以下を使用できます。
echo **/*foo*
ファイルまたはフォルダを再帰的に検索する。これは、Bash 4、zsh、および類似のシェルでサポートされています。
個人的に私はこのシェル関数を定義しています:
f() { find . -name "*$1*"; }
注:上記の行は、シェルに直接貼り付けるか、ユーザーの~/.bashrc
ファイルに追加できます。
次に、次のように入力してファイルを検索できます。
f some_name
または、単純な構文のfd
ユーティリティを使用することもできますfd pattern
。
shopt -s globstar
コマンドで拡張グロビングをアクティブにする必要があるため。これは、Bash、zsh、および類似のシェルでサポートされています。
bash-3.2$ shopt -s globstar
与えbash: shopt: globstar: invalid shell option name
fd
find
が遅すぎる場合は、fd
utilityを試してくださいfind
。Rustで書かれたシンプルで高速な代替手段です。
構文:
fd PATTERN
デモ:
ホームページ:https : //github.com/sharkdp/fd
asciicast2vector
使用できます。
find <directory_path> -type f -name "<wildcard-match>"
wildcard-matchでは、一致させたい文字列を指定できます。例:* .c(すべてのcファイル)
以下を使用できます。
# find . -type f -name 'text_for_search'
REGXを使用する場合 -iname
# find . -type f -iname 'text_for_search'
再帰的なファイルを検索するためのデフォルトの方法であり、ほとんどの場合で利用可能です
find . -name "filepattern"
現在位置している現在のディレクトリ内から、ファイル名またはパターンの再帰トラバースを開始します。findコマンドを使用すると、ワイルドカードとさまざまなスイッチを使用して、オプションの完全なリストを表示できます。
man find
または、システムでmanページが利用できない場合
find --help
ただし、ファイルシステム全体をトラバースしてファイルにインデックスを付ける、よりモダンで高速なツールがあります。そのような一般的なツールの1つは、locateまたはslocate / mlocateです。インストール方法については、OSのマニュアルを確認してください。インストールされている場合、データベースを開始する必要があります。インストールスクリプトがそれを実行しない場合は、次のように入力して手動で実行できます。
sudo updatedb
そして、それを使用して特定のファイルタイプを探すには
locate filename
または、現在のディレクトリからファイル名またはパターンを検索するには、次のように入力します。
pwd | xargs -n 1 -I {} locate "filepattern"
ファイルのデータベースを調べ、入力したパターンに一致するパス名をすばやく出力します。検索のオプションの完全なリストを表示するには、次のように入力します。
locate --help
またはman locate
さらに、cronジョブを介してスケジュールされた時間にデータベースを更新するようにLocateを構成できるため、午前1時にデータベースを更新するサンプルcronは次のようになります。
0 1 * * * updatedb
ファイルシステム全体を走査するには、updatedbにはroot特権が必要なため、これらのcronジョブはrootで構成する必要があります。
再帰的に移動するときに、locateがあまり使用されないことに驚いています。
最初に「$ PWD」を検索して、対象の現在のフォルダーにあるファイルのリストを取得し、次にそれらに対してgrepsを実行します。
locate "$PWD" | grep -P <pattern>
もちろん、これは、updatedbが実行され、インデックスが定期的に更新されることを前提としています。これは、検索を実行してツリーの下に行くように求めるよりも、ファイルを検索する方がはるかに速い方法です。完全を期すためにこれに言及します。ツリーがそれほど重くない場合は、findを使用しても何も起こりません。
locate "$PWD*.mp4"
スキップできる可能性があることを思い出させるためにgrep
以下のコマンドは、すべてのファイルを検索するのに役立ちます
。1)ケースに関係なく
2)結果許可なしにフォルダを除外します
。3)ルートまたは好きなパスから検索します。/を希望のパスに変更します。
構文:
find -iname '' 2>&1 | grep -v "Permission denied"の
例
find / -iname 'C * .xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
使用する
find path/to/dir -name "*.ext1" -o -name "*.ext2"
説明
find
は再帰を行います。-o
略です-or
。したがって、上記は、このワイルドカードまたはこのワイルドカードを検索することを意味します。パターンが1つしかない場合は、-o
。