BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

Linuxでコマンドを検索[便利な例を使用]

検索 Linuxシェルのコマンドを使用すると、ファイルシステム内のファイルを検索できます。名前、ユーザー権限、サイズでファイルを検索できます。 検索 コマンドは、見つかったファイルに対してアクションを実行することもできます。

コマンド構文の検索

findの構文 コマンドは次のとおりです:

find [OPTIONS] [PATH] [EXPRESSION]
を検索

場所:

  • [オプション] 検索動作を決定するための以下の表のオプションです
  • [パス] 検索の開始点です
  • [表現] 一致するファイルを見つけるためのテストと、見つかったファイルに対して実行する必要のあるアクションを定義します

オプション

一般的に使用されるオプションは次のとおりです 検索 コマンド、マニュアルから改作:

-P シンボリックリンクをたどらないでください。これがデフォルトの動作です
-L シンボリックリンクをたどります。 findがファイルに関する情報を調べたり印刷したりする場合、使用される情報は、リンク自体からではなく、リンクが指すファイルのプロパティから取得されるものとします。
-H コマンドライン引数の処理中を除いて、シンボリックリンクをたどらないでください

表現

findからのこれらの一般的なステートメント EXPRESSIONの作成に使用できるマニュアル 一致するファイルをテストし、オプションでそれらに対してアクションを実行します:

テスト(検索条件)
-空 空のファイルを探す
-実行可能ファイル 実行可能で検索可能なディレクトリであるファイルと一致します
-グループ名前 ファイルは名前のグループに属しています
-mtime n ファイルデータが最後に変更されたのは、24時間以内、それ以上、または正確にn*24時間前です
-名前パターン ファイル名のベース(先頭のディレクトリが削除されたパス)がパターンと一致する pattern
-パスパターン ファイルパスがパターンと一致するパターン
-読み取り可能 現在のユーザーが読み取り可能なファイルと一致します
-サイズn ファイルはn単位未満、多い、または正確にn単位のスペースを使用し、切り上げます(使用可能な単位については下の表を参照してください)
-タイプc ファイルのタイプはc c の値については、以下の表を参照してください )
-ユーザー名前 ファイルはnameが所有しています ユーザー
アクション
-印刷 ファイル名を出力します(デフォルトのアクション)
-整理 ファイルがディレクトリである場合は、そこに降りないでください
-深さ ディレクトリ自体の前に各ディレクトリの内容を処理します
-削除 一致したファイルを削除します。 -deleteアクションもオプションのように機能します(-depthを意味するため)
-execコマンド コマンドを実行します
-execdirコマンド -execと同様ですが、指定されたコマンドは、一致したファイルを含むサブディレクトリから実行されます
-okコマンド -execと同様ですが、最初にユーザーに確認してください。
-okdirコマンド -execdirと同様ですが、-okの場合と同じ方法で最初にユーザーに確認します。
-printf format ファイルの詳細を形式で印刷

式の演算子

演算子を使用して、式内のアイテムをチェーン化できます:

-o または
-a AND(演算子が指定されていない場合の式間のデフォルトの演算子

ファイルを検索するためのオプションと式の完全なリストについては、次のコマンドを実行できます。

man find

コマンド例の検索

オプション、式、およびアクションを組み合わせて、一致するファイルを一覧表示する単純な検索操作、または複雑な条件でファイルを検索してアクションを実行できる複雑な操作を作成できます。例については、以下を参照してください:

ファイル名でファイルを検索

この例では、 myfileという名前のすべてのファイルを検索します ディレクトリ内/home / screw

find /home/screw -name myfile

タイプで検索

上記のコマンドは、一致するすべてのファイルを返します– ディレクトリ、リンク、デバイス–ファイルシステム内のすべて。

タイプのf 式は検索をファイルに制限します それだけ。 myfileという名前のファイルを検索するには :

find /home/screw  -type f -name myfile

または、ディレクトリのみを検索します:

find /home/screw  -type d -name myfile

使用可能なタイプは次のとおりです。

b ブロック(バッファリング)スペシャル
c キャラクター(バッファなし)スペシャル
d ディレクトリ
p 名前付きパイプ(FIFO)
f 通常のファイル
l シンボリックリンク; -Lオプションまたは-followオプションが有効になっている場合、シンボリックリンクが壊れていない限り、これは当てはまりません。
s ソケット

大文字と小文字の区別

-名前 オプションは大文字と小文字を区別します–大文字と小文字を区別せずに検索するには、 -inameを使用します :

find /home/screw -iname mYFiLe

ワイルドカードと正規表現を使用して拡張子でファイルを検索

ワイルドカードを使用できます ( * )ファイル名で、ファイル拡張子で検索できます:

find -L /home/screw -name '*.pdf'

上記では、 .pdfのすべてのファイルが検索されます 拡大。引用された検索パターンには正規表現を含めることができます。

名前または拡張子によるファイルの省略

-ない 演算子を使用して、名前またはパターンでファイルを省略し、一致しないすべての結果を返すことができます:

find /home/screw -type f -not -name '*.pdf'

結果からディレクトリ全体を除外する

-pruneを使用します 一致するパスとその内容を省略するオプション。以下の例では、 / home / screw / junkを省略しています。 結果からのディレクトリ:

find /home/screw -path /home/screw/junk -prune -o -print

サイズでファイルを検索

この例では、500キロバイト未満のすべてのファイルを検索します:

find /home/screw -type f -size -500k

これは、2つのサイズ条件を渡すことにより、100〜200キロバイトのファイルを検索します。

find /home/screw -type f -size +100k -size -200k

サイズで検索できる単位は次のとおりです。

b 512バイトのブロック(これは、サフィックスが使用されていない場合のデフォルトです)
c バイト
w 2バイトの単語
k キビバイト(KiB、1024バイト単位)
M メビバイト(MiB、1024の単位* 1024 =1048576バイト)
G ギビバイト(GiB、1024 * 1024 * 1024 =1073741824バイトの単位)

変更またはアクセス日

次の例では、すべての .txtを検索します 過去14日間に変更されたファイル:

find /home/screw -name '*.txt' -mtime 14

最後のアクセスで検索するには 変更の代わりに 日付、 -atimeを使用します -mtimeの代わりにオプション 。

記号を追加することもできます( + または )指定された間隔よりも大きいまたは小さい変更が加えられたファイルを検索する–この例では、14日より前に変更されたファイルが返されます。

find /home/screw -name '*.txt' -mtime +14

時間の単位として日ではなく分を使用するには、 -mminに置き換えることができます。 -アミン -mtimeの代わりに および-atime

いつものように、組み合わせて組み合わせるオプションは他にもたくさんあります。これらはすべてマニュアルで利用でき、次のコマンドを実行することで利用できます。

man find

所有者ユーザー/グループ

/ home / screwでrootが所有するすべてのファイルを検索するには ディレクトリ、実行:

find /home/screw -user root

許可

次のコマンドは、グローバルな読み取り/書き込み権限を持つすべてのファイルを検索します。

find /home/screw -perm 777

chmodに関する記事をご覧ください コマンドとその機能。

組み合わせ

検索式の任意の組み合わせを使用できます。それらの間に演算子が含まれていない場合、ファイルが一致するためには両方の条件が満たされている必要があると見なされます(つまり、AND演算子がデフォルトです)。

この例では、過去14日間に作成された500kb未満のすべてのテキストファイルを検索します。

find /home/screw -name '*.txt' -mtime 14 -type f -size -500k

見つかったファイルに対するアクション

デフォルトでは、findコマンドは検索操作の結果を出力します( -print を呼び出すのと同じです)。 アクション)。

find /home/screw -name myfile -print

結果フォーマットのカスタマイズ

結果の出力をカスタマイズして、見つかったファイルに関する追加情報を含めることができます。この例では、ファイル名、ダッシュ、ファイルのサイズ(バイト単位)を出力します。

find /home/screw -name '*.txt' -printf '%f - %s bytes'

ファイルサイズからファイル変更やアクセス時間の個々の日付フィールドまで、多くの変数を使用して出力をカスタマイズできます。完全なリストについては、マニュアルを確認してください。

ファイルへの結果の書き込み

検索の結果をリダイレクトする テキストファイルへの操作:

find /home/screw -name myfile > find_results.txt

削除

-削除 アクションは一致するファイルを削除します(確認なしで、注意してください!):

find /home/screw -name '*.junk' -delete

-execを使用してコマンドを実行する / * -execdir *

findに対して任意のシェルコマンドを実行できます -execを使用した結果 アクション:

find /home/screw -name '*.txt' -exec ls -la {} ';'

-exec 現在の作業ディレクトリからコマンドを実行します。見つかったファイルの場所からコマンドを実行するには、 -execdirを使用します 代わりに:

find /home/screw -name '*.txt' -execdir ls -la {} ';'

上記の2つの例では、 ls -la 各結果に対して実行されます。中括弧{} 検索コマンドの結果と‘;’に置き換えられます lsのコマンドライン引数を終了します findとなるようにコマンドを実行します それらがどこで終わるかを知っています。

-okで確認を求める / -okdir

-ok アクションは、 -execと同じように機能します アクションが、与えられたコマンドを実行する前にあなたに尋ねます。これは、ファイルを削除したいが、各ファイルを削除する前に尋ねられる場合に便利です:

find /home/screw -name '*.txt' -ok rm {} ';'

-okdir プロンプトも表示されますが、見つかったファイルの場所からコマンドを実行します:

find /home/screw -name '*.txt' -okdir rm {} ';'


  1. Linuxで役立つ10の連鎖演算子と実用的な例

    Linuxコマンドの連鎖とは、複数のコマンドを組み合わせて、それらの間で使用されるオペレーターの動作に基づいて実行させることを意味します。 Linuxでのコマンドの連鎖は、シェル自体で短いシェルスクリプトを記述し、ターミナルから直接実行するようなものです。連鎖により、プロセスの自動化が可能になります。さらに、無人の機械は、チェーンオペレーターの助けを借りて非常に体系的な方法で機能することができます。 関連項目: Awkおよび正規表現を使用してファイル内のテキストをフィルタリングする方法 この記事は、頻繁に使用されるコマンドチェーン演算子に光を当てることを目的としています。 、簡単な説明と

  2. ファイルとディレクトリを一覧表示するLinuxのlsコマンド

    ls Linuxのコマンドは、おそらく最初に使用する必要のあるコマンドの1つです。この記事では、コマンドと一般的に使用されるパラメータについて説明します。 私が好むオプションのセットは次のとおりです。 ls -Zaltrh 各オプションを個別に掘り下げて、オプションのグロブ全体が役立つ理由を説明しましょう。 LinuxLSコマンド構文 #ls [OPTION] [FILE] OPTIONS: [-a], do not ignore entries starting with . or .. [-h], with -l, print sizes in human readable form