logo

Linux/Unix の Find コマンドと例

find コマンドは、ディレクトリ内の特定のファイルを見つけるのに役立ちます。これは、権限、ユーザー所有権、変更、日付/時刻、サイズなどのさまざまな条件でファイルのリストを検索するために使用されます。

Unix 系およびその他のオペレーティング システムでは、find コマンドは、ユーザー指定のいくつかの形式に基づいてファイルを検索し、一致したすべてのオブジェクトのパス名を出力するか、他のアクションが要求された場合はそのアクションを実装するコマンド ライン ユーティリティです。一致したすべてのオブジェクト。

開始したい場所から検索を開始し、その後、階層構造 (通常はツリー) のディレクトリ (ノード) を再帰的に横断します。 find コマンドは、開始ディレクトリの下にある 1 つ以上のストレージ デバイスに属するさまざまなファイル パーティション システムを検索し、横断することができます。

検索形式には、ファイル名と照合するためのパターン、または変更時刻またはファイル アクセス時刻と照合するための時間範囲が含まれます。 find コマンドは、デフォルトで現在の作業ディレクトリの下にあるすべてのファイルのリストを提供します。ただし、ユーザーは開始ディレクトリで検索を希望の最大レベルに制限できます。

関連する検索プログラムは、fine コマンドから取得したインデックス付きファイル データベースを適用して、ファイル システム全体を名前で検索するためのより高速な技術を提供します。

find ユーティリティは、ほとんどの機能にデフォルトで付属しています。 Linuxディストリビューション したがって、追加のパッケージをインストールする必要はありません。これは、最も重要で使用されるコマンドの 1 つです。 Linux システム。

 find 

2 つのオプションは、find がシンボリック リンクをどのように考慮するかを決定します。デフォルトの性質では、シンボリック リンクを追求することはありません。旗、つまり、 -L 、シンボリック リンクを追求する find につながります。旗、つまり、 -H 、コマンドライン引数を続行しながら、シンボリックリンクのみを追跡します。フラグは、find コマンドの POSIX 標準に記載されています。基本的な拡張はフラグです。つまり、 -P 、次のシンボリックリンクを明示的に無効にします。

少なくともパスは式を予測する必要があります。 find コマンドは内部でワイルドカードを解釈できるため、シェルのグロビングを管理するにはコマンドを慎重に引用符で囲む必要があります。

式コンポーネントはコマンド ライン引数の境界によって分離されており、通常はシェル構文内の空白として示されます。左側から右側に向かって考えられます。 OR や AND などの論理コンポーネントや述語 (アクションやフィルター) を含めることができます。 GNU find には、POSIX で言及されていない他の機能がいくつか含まれています。

ディレクトリの指定には次の記号が使用されます。

(。) : 現在のディレクトリ名用

(/) : ルートディレクトリの場合

Find コマンドの簡単な歴史

find コマンドは、バージョン 5 Unix の要素として使用されました。 プログラマーのワークベンチ プロジェクトであり、によって指定されました ディック・ヘイト cpio と併用するために開発されました。

元々、find コマンドの GNU 実装は次のように指定されていました。 エリック・デッカー 。その後、開発されたのが、 デヴィッド・マッケンジー、ティム・ウッド 、 そして ジェイ・プレット 。また、find コマンドが IBM i OS に移植されました。

パワーシェル管理者

述語

広く使用されているプラ​​イマリは次のとおりです。

変更して列を追加します。
    -名前パターン:ファイル名が指定されたシェルグロブパターンと同じかどうかをチェックします。-type タイプ:ファイルが指定されたタイプであることを確認します。-印刷:常に真の値が得られます。現在のファイル名と改行を標準出力に出力します。-print0:常に真の値が得られます。現在のファイル名とヌル文字を標準出力に出力します。 POSIX では必要ありません。-exec プログラム [引数 ...];:常に真の値が得られます。指定された固定引数と現在のファイル パスを使用してプログラムを実行します。-exec プログラム [引数 ...] { } +:常に真の値が得られます。指定された固定引数と可能な限り複数のパスを使用してプログラムを実行します。ほぼすべての実装において、他の {} の出現は、指定された名前の余分なコピーを意味します (POSIX では必要ない側面)。-ok プログラム [引数 ...];:-exec と同じですが、プログラムが 0 を指定した場合は false または true を返します。

Find は、式が -ok、-exec、-print、または -print0 のいずれも使用していない場合に条件が true の場合に、デフォルトで -print を実装します。

オペレーター

演算子は検索コマンドの式を拡張します。これらは優先順位の降順に記載されています。

    ( 式 ):この演算子は優先順位を強制できます。!式:expr が false を返す場合、true を返します。
  • expr1 expr2 (または expr1 -a expr2 : AND。expr1 が false の場合、expr2 は評価されません。
  • expr1 -o expr2 : OR。 expr1 が true の場合、expr2 は評価されません。

find コマンドの例

次の find コマンドの例を見てみましょう。

名前でファイルを検索

拡張子「.txt」で終わるすべてのファイルを検索できます。これを行うには、以下のコマンドを実行します。

 find . -name '*.txt' 

上記のコマンドは、現在の作業ディレクトリのすべてのテキスト ファイルを一覧表示します。以下の出力を考えてみましょう。

Linuxの検索

上記の出力から、拡張子「.txt」を持つすべてのファイルが find コマンドでリストされます。

種類ごとにファイルを検索する

「-type」パラメータは、ファイルの種類を指定するために使用されます。

ファイルの種類の一部は次のとおりです。

  • f: 通常ファイル
  • d: ディレクトリ
  • l: シンボリックリンク
  • c: キャラクターデバイス
  • b: ブロックデバイス

以下のコマンドを考えてみましょう。

 find . -type d -name '*.bak' 

上記のコマンドは、「.bak」拡張子を持つすべてのディレクトリを一覧表示します。以下の出力を考えてみましょう。

Linuxの検索

上記の出力から、コマンド 'find . -type d -name '*.bak' は、'.bak' で終わるすべてのディレクトリを表示します。

新しいファイルを探す

「-newer」パラメータは、指定されたファイルよりも新しいファイルを検索するのに役立ちます。以下のコマンドを考えてみましょう。

 find . -newer msg.txt 

上記のコマンドは、現在の作業ディレクトリにある「msg.txt」より新しいファイルをすべて表示します。以下の出力を考えてみましょう。

Linuxの検索

上記の出力から、表示されるファイルはすべて「msg.txt」ファイルよりも新しいことがわかります。

ファイルを検索して削除する

「-delete」オプションは、特定のファイルを削除するために使用されます。このコマンドは一度実行すると元に戻すオプションがないため、使用する際は十分に注意する必要があります。以下のコマンドを考えてみましょう。

 find . -name Demo.txt -delete 

上記のコマンドは、現在の作業ディレクトリからファイル「Demo.txt」を削除します。以下の出力を考えてみましょう。

Linuxの検索

ディレクトリを探す

「type -d」オプションは、ディレクトリを検索するために使用されます。以下のコマンドを考えてみましょう。

 find . type -depth -name Newdirectory 

上記のコマンドは、「Newdirectory」の場所を見つけます。以下の出力を考えてみましょう。

Linuxの検索

変更時刻によるファイルの検索

「-mtime」オプションに日数を指定すると、変更されたファイルを検索できます。日数には正または負の値を指定できます。過去 1 日に対して -1 を使用した場合と同様に、負の値が使用されます。同様に、+1 を使用すると 1 日以上前のファイルが検索されます。以下のコマンドを考えてみましょう。

 find ./Newdirectory -mtime -1 

上記のコマンドは、過去 1 日以内に変更されたファイルを検索します。以下の出力を考えてみましょう。

Linuxの検索

権限に基づいてファイルを検索する

「-perm」オプションは、許可に基づいてファイルを検索するために使用されます。 「-perm」オプションを指定して find コマンドを実行し、必要な値を渡します。以下のコマンドを考えてみましょう。

 find ./ -perm 777 

上記のコマンドは、指定されたディレクトリにある、誰もが読み取り、書き込み、実行できるファイルを一覧表示します。

ファイルの検索と置換

ファイルを検索して置換するには、find コマンドと sed コマンドを組み合わせる必要があります。ファイルを操作するには、find コマンドで「-exec」オプションを使用します。以下のコマンドを考えてみましょう。

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

上記のコマンドから、指定されたオカレンスが置き換えられます。以下の出力を考えてみましょう。

Linuxの検索

複数のファイル内のテキストを検索する

find コマンドと grep コマンドを別の組み合わせで作成すると、さまざまなファイルからテキストを検索できます。以下のコマンドを考えてみましょう。

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

上記のコマンドは、ディレクトリ「Newdirectory」内のすべてのテキスト ファイルからテキスト「demo」を含む行を検索します。以下の出力を考えてみましょう。

Linuxの検索

上記の出力から、「demo」というテキストを含む行が表示されていることがわかります。

スイッチJava

すべてのディレクトリを検索する

 $ find / -name file1 -type f -print 

上記のコマンドは、タイトルが file1 である通常のファイルのすべてのディレクトリを検索し、それを画面に表示します。一般に、この方法でファイルを検索することはお勧めできません。かなりの時間がかかる場合があります。したがって、ディレクトリについて言及することが最善です。一部のオペレーティング システムでは、find コマンドにとって好ましくないファイル システム (動的) がマウントされる場合があります。シェルに固有の文字を含むより複雑なファイル名は、一重引用符で囲む必要がある場合があります。