GNU/Linux >> Linux の 問題 >  >> Linux

findコマンドを使用してLinux上のファイルとディレクトリを検索します

どんなに整理されていても、ファイルが見つからないことがあるようです。そもそもファイル名が思い出せないことが原因の場合もあります。名前は知っているのに、どこに保存したのか思い出せないこともあります。そもそも作成しなかったファイルが必要になることもあります。ただし、問題が何であれ、POSIXシステムでは常にfindがあることを私は知っています。 コマンド。

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

findのインストール

find コマンドはPOSIX仕様によって定義され、POSIXシステム(Linux、BSD、およびmacOSを含む)を測定するためのオープンスタンダードを作成します。簡単に言えば、あなたはすでにfindを持っています Linux、BSD、またはmacOSを実行している限りインストールされます。

ただし、すべてのfindが コマンドはまったく同じです。 GNU find たとえば、コマンドには、BSD、Busybox、またはSolarisのfindの機能があります。 コマンドは持っていないか、持っているかもしれませんが、実装が異なります。この記事ではGNUfindを使用しています すぐに利用でき、かなり人気があるため、findutilsパッケージから。この記事で説明するほとんどのコマンドは、findの他の実装で機能します 、ただし、Linux以外のプラットフォームでコマンドを試して予期しない結果が得られた場合は、GNUバージョンをダウンロードしてインストールしてみてください。

名前でファイルを検索

正規表現を使用して完全なファイル名またはファイル名の一部を指定することにより、ファイル名でファイルを見つけることができます。 find コマンドには、検索するディレクトリへのパス、検索する属性を指定するオプション(たとえば、-name)が必要です。 大文字と小文字を区別するファイル名の場合)、次に検索文字列。デフォルトでは、検索文字列は文字通りに扱われます:find コマンドは、正規表現構文を使用しない限り、引用符の間に入力した文字列とまったく同じファイル名を検索します。

Documentsディレクトリに次の4つのファイルが含まれていると仮定します。Foofoofoobar.txt 、およびfoo.xml 。 「foo」という名前のファイルのリテラル検索は次のとおりです。

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

-inameを使用して大文字と小文字を区別しないようにすることで、検索範囲を広げることができます。 オプション:

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

ワイルドカード

基本的なシェルワイルドカード文字を使用して、検索範囲を広げることができます。たとえば、アスタリスク(* )は任意の数の文字を表します:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

疑問符(? )は単一の文字を表します:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

これは正規表現の構文ではないため、ドット(. )は、この例ではリテラルドットを表します。

正規表現

正規表現を使用することもできます。 -inameと同様 および-name 、大文字と小文字を区別するオプションと大文字と小文字を区別しないオプションの両方があります。 -nameとは異なり および-iname ただし、オプションは-regex および-iregex 検索はパス全体に適用されます 、ファイル名だけではありません。つまり、fooを検索すると 、fooのため、結果は得られません /home/tux/Documents/fooと一致しません 。代わりに、パス全体を検索するか、文字列の先頭でワイルドカードシーケンスを使用する必要があります:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

先週変更されたファイルを探す

先週最後に変更したファイルを見つけるには、-mtimeを使用します オプションと過去の(負の)日数:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

数日以内に変更されたファイルを検索

-mtimeを組み合わせることができます 日の範囲内でファイルを見つけるためのオプション。最初の-mtime 引数として、ファイルを変更できた最新の日数を指定し、2番目の日数として最大の日数を指定します。たとえば、この検索で​​は、変更時間が1日を超え、7日を超えないファイルが検索されます。

$ find ~ -mtime +1 -mtime -7

ファイルタイプで検索を制限する

findの結果を最適化するのが一般的です 探しているファイルの種類を指定します。探しているものがわからない場合はこのオプションを使用しないでください。ただし、ディレクトリではなくファイル、またはファイルではなくディレクトリを探していることがわかっている場合は、これはすばらしいことです。使用するフィルター。オプションは-type 、およびその引数は、いくつかの異なる種類のデータを表す文字コードです。最も一般的なものは次のとおりです。

  • d -ディレクトリ
  • f -ファイル
  • l -シンボリックリンク
  • s -ソケット
  • p -名前付きパイプ(FIFOに使用)
  • b -特別なブロック(通常はハードドライブの指定)

次にいくつかの例を示します。

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

スコープを調整

find コマンドはデフォルトで再帰的です。つまり、ディレクトリに含まれるディレクトリのディレクトリ(など)で結果を検索します。これは大きなファイルシステムでは圧倒される可能性がありますが、-maxdepthを使用できます findが必要なフォルダ構造の深さを制御するオプション 降りる:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

-mindepthを使用して、再帰の最小深度を交互に設定できます。 :

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

チートシートをダウンロード

この記事では、findの基本的な機能についてのみ説明します。 。これは、システムを検索するための優れたツールですが、強力なParallelコマンドの非常に便利なフロントエンドでもあります。 findを学ぶ理由はたくさんあります 、だから無料のfindをダウンロードしてください 虎の巻 コマンドの詳細を学ぶのに役立ちます。


Linux
  1. Linuxで最大のファイルとディレクトリを探す

  2. Linuxのfindコマンドの使用–例を使用した使用法

  3. Linuxでfdコマンドを使用してファイルを検索する方法

  1. プロのようにLinuxでファイルとディレクトリを探す

  2. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  3. Linuxで検索および検索コマンドを使用してファイルを検索する

  1. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  2. Linux の find コマンドを使用してファイルを検索する方法

  3. Linux で find コマンドを使用して、スペースのあるファイルを検索して削除する