Skip to main content

LinuxとUnixコマンドfindを使う

Linux/Mac Terminal Tutorial: The Grep Command - Search Files and Directories for Patterns of Text (六月 2026)

Linux/Mac Terminal Tutorial: The Grep Command - Search Files and Directories for Patterns of Text (六月 2026)
Anonim

LinuxとUnixのコマンド 見つける ディレクトリ階層内のファイルの検索を実行します。

の構文 見つける コマンド:

find パス… 式

説明

このマニュアルページにはGNU版の 見つける 。コマンド 見つける 与えられた式を左から右に評価することによって、それぞれのファイル名に根ざしたディレクトリツリーを検索します(以下の演算子のセクションを参照してください)。言い換えれば、左辺はfalseである そして 操作、trueの または 、 その時点で 見つける 次のファイル名に移動します。

次で始まる最初の引数:

  • -
  • ( または),
  • !

表現の始まりとみなされます。その前にある引数は検索のパスになり、その後の引数は残りの式になります。パスが指定されない場合、現在のディレクトリが使用されます。式が与えられていない場合、式 -print 使用されている。

ザ 見つける コマンドはすべてのファイルが正常に処理された場合はステータス0で終了し、エラーが発生した場合は0より大きい値を返します。

式は、オプション(特定のファイルの処理ではなく全体の動作に影響を与え、常にtrueを返す)、テスト(真または偽の値を返す)、およびアクション(副作用があり、真または偽の値)はすべて演算子で区切られています。表現 -そして 演算子を省略した場合を想定しています。式に他のアクションが含まれていない場合 -プルーン 、その後 -print 式が真であるすべてのファイルに対して実行されます。

オプション

すべてのオプションは常にtrueを返します。それらは、式の中の場所に達したときにのみ処理されるのではなく、常に有効になります。したがって、わかりやすくするために、式の先頭に配置することをお勧めします。

-daystart 時間を測定する(for -amin、-atime、-cmin、-ctime、-mmin、 そして -mtime )を24時間前よりもむしろ今日の初めから使用しています。
深さ 各ディレクトリの内容をディレクトリ自体の前で処理します。
-follow シンボリックリンクを参照解除する。インプライズ - ノレアフ .
-助けて または - 助けて コマンドラインの使い方の概要を表示する 見つける 終了します。
-maxdepth 数 コマンドライン引数以下のディレクトリのレベル数(負でない整数)を降順で指定します。表現 -maxdepth 0 テストとアクションをコマンドライン引数にのみ適用することを意味します。
-mindepth number 数値より少ないレベル(負でない整数)でテストやアクションを適用しないでください。表現 -mindepth 1 コマンドライン引数以外のすべてのファイルを処理することを意味します。
-マウント 他のファイルシステムのディレクトリを降下させないでください。の代替名 -xdev 他のいくつかのバージョンとの互換性 見つける .
- ノレアフ ディレクトリにハードリンク数より2つ少ないサブディレクトリがあると仮定して最適化しないでください。*
-バージョン または - バージョン 印刷する 見つける バージョン番号と終了。
-xdev 他のファイルシステムのディレクトリを降下させないでください。

*このオプションは、CD-ROMやMS-DOSファイルシステムやAFSボリュームマウントポイントなどUnixのディレクトリリンク規則に従わないファイルシステムを検索する場合に必要です。通常のUnixファイルシステムの各ディレクトリには、少なくとも2つのハードリンクがあります。 (期間)エントリ。さらに、そのサブディレクトリ(ある場合)にはそれぞれがあります。そのディレクトリにリンクされたエントリ。

いつ 見つける ディレクトリを調べているときに、ディレクトリのリンク数よりも2つ少ないサブディレクトリがあると、ディレクトリ内の残りのエントリはディレクトリではないことがわかります 葉 ディレクトリツリー内のファイル)。ファイルの名前だけを調べる必要がある場合は、それらの名前を統計する必要はありません。検索速度が大幅に向上します。

テスト

数値引数は次のように指定できます。

+ n より大きい n。
-n 以下の場合 n。
n 正確に n。
- アミノ ファイルが最後にアクセスされた n 数分前。
-anewer ファイル 最近アクセスされたファイル ファイル 変更されました。 -anewerは、-followがコマンドラインで-anewerの前に来る場合にのみ、-followの影響を受けます。
- 時刻n ファイルが最後にアクセスされた n * 24時間前。
-cmin n ファイルのステータスが最後に変更されました n 数分前。
-cnewer ファイル ファイルのステータスは、ファイルが変更された直前に最後に変更されました。- 新人 影響を受ける -follow 場合のみ -follow 前に来る -cnewer コマンドラインで
-ctime n ファイルのステータスが最後に変更されました n * 24時間前。
-空の ファイルは空で、通常のファイルまたはディレクトリのいずれかです。
-false 常に偽です。
-fstype タイプ ファイルは指定されたタイプのファイルシステム上にあります。有効なファイルシステムの種類はUnixのバージョンによって異なります。 Unixやその他のバージョンで受け入れられるファイルシステムタイプの不完全なリストは、ufs、4.2,4.3、nfs、tmp、mfs、S51K、S52Kです。あなたのファイルシステムのタイプを見るには、%Fディレクティブで-printfを使うことができます。
-gid n ファイルの数値グループIDは n .
-group gname ファイルはグループgname(許可された数値のグループID)に属します。
-ilname パターン -lnameと似ていますが、大文字と小文字は区別されません。
-iname パターン 好き -名 一致は大文字と小文字を区別しません。例えば、パターン fo * そして F ?? ファイル名と一致する フー , FOO , foo , fOo 等
-num ファイルにはiノード番号があります n .
-ipath パターン 好き -パス 一致は大文字と小文字を区別しません。
-iregex パターン -regexと似ていますが、大文字と小文字は区別されません。
-links n ファイルがある n リンク。
-lname パターン ファイルはシェルパターンと一致する内容のシンボリックリンクです。メタキャラクターは扱わない / または . 特別に。
-mmin n ファイルのデータが最後に変更された n 数分前。
-mtime n ファイルのデータが最後に変更された n * 24時間前。
-name パターン ファイル名のベース(先頭のディレクトリが削除されたパス)は、シェルのパターンと一致します。メタキャラクター(*, ?、および )は一致しません . ベース名の先頭に。ディレクトリとその下のファイルを無視するには、 -プルーン ;説明の例を参照してください -パス .
-newer ファイル ファイルは最近よりも変更されました ファイル 。表現 - 新しい 影響を受ける -follow 場合のみ -follow 前に来る - 新しい コマンドラインで
- 奴 ファイルの数値ユーザーIDに対応するユーザーはありません。
- グループ ファイルの数値グループIDに対応するグループはありません。
-path パターン シェル名と一致するファイル名 パターン 。メタキャラクターは扱わない / または . 特に;したがって、例えば、見つける。 -path './sr*sc ./src/misc(存在する場合)というディレクトリのエントリを表示します。ディレクトリツリー全体を無視するには、 -プルーン ツリー内のすべてのファイルをチェックするのではなく、たとえば、ディレクトリsrc / emacsとその下のすべてのファイルとディレクトリをスキップし、見つかった他のファイルの名前を表示するには、次のようにします。見つける。 -path './src/emacs' -prune -o -print
-perm mode ファイルのパーミッションビットは厳密に モード (8進または象徴的)。シンボリックモードはモード0を出発点として使用します。
-perm -mode すべての許可ビット モード ファイルに設定されます。
-perm + mode いずれかの許可ビット モード ファイルに設定されます。
-regex パターン ファイル名が正規表現に一致する パターン 。これは検索ではなくパス全体で一致します。たとえば、./fubar3という名前のファイルと一致させるには、正規表現 。*バー。 または 。* b。* 3、 だがしかし b。* r3.
-size n bckw ファイル使用 n スペースの単位。単位はデフォルトで512バイトブロックです。 n 、バイトが続く場合はバイト n 、kが続く場合はキロバイト n 、またはwが続く場合は2バイトの単語 n 。サイズは間接ブロックをカウントしませんが、実際には割り当てられていないスパースファイルのブロック数をカウントします。
常に真実。
タイプC ファイルはタイプです c :
b 特別なブロック(バッファリング)
c キャラクター(バッファーなし)スペシャル
d ディレクトリ
p 名前付きパイプ(FIFO)
f 通常のファイル
l シンボリックリンク
s ソケット
D ドア(Solaris)
-uid n ファイルの数値ユーザーIDは n .
-used n ファイルが最後にアクセスされた n そのステータスが最後に変更された日。
-user uname ファイルはユーザーが所有しています uname (数字のユーザーIDが許可されています)。
-xtype c と同じ -タイプ ファイルがシンボリックリンクでない限り。シンボリックリンクの場合:if -follow ファイルがタイプのファイルへのリンクである場合はtrue c ; if -follow 与えられている、真の場合 c lです。言い換えると、シンボリックリンクの場合、 -xtype ファイルのタイプをチェックします。 -タイプ チェックしません。

行動

-exec コマンド ;

実行する コマンド ;ステータスが0の場合はtrue。以下のすべての引数見つける `; 'で構成される引数が指定されるまで、そのコマンドの引数とみなされます。遭遇する。文字列 `{} 'は、現在のファイル名で置き換えられ、コマンドの引数の中でどこでも処理されます。見つける。シェルによる拡張からシェルを保護するためには、これらの構造の両方をエスケープ( ` ')するか、引用符で囲む必要があるかもしれません。コマンドは開始ディレクトリで実行されます。

-fls ファイル

真; -lsと似ていますが、 ファイル -fprintのように。

-fprint ファイル

真;完全なファイル名をファイルに出力する ファイル 。もし ファイル いつ存在しない見つける 実行されると、作成されます。それが存在する場合、切り捨てられます。ファイル名 `` / dev / stdout ''と `` / dev / stderr ''は特別に扱われます。標準出力と標準エラー出力をそれぞれ参照します。

-fprint0 ファイル

真; -print0と似ていますが、 ファイル -fprintのように。

-fprintf ファイル フォーマット

真; -printfと似ていますが、 ファイル -fprintのように。

-OK コマンド ;

-execと似ていますが、ユーザーに最初に(標準入力で)尋ねます。応答が `y 'または` Y'で始まらない場合は、コマンドを実行せずにfalseを返します。

-print

真;完全なファイル名を標準出力に出力し、その後に改行を続けます。

-print0

真;完全なファイル名を標準出力に出力し、その後にヌル文字を続けて出力します。これにより、改行を含むファイル名は、改行を処理するプログラムによって正しく解釈されます。見つける 出力。

-printf フォーマット

真;印刷する フォーマット ` 'エスケープと`%'ディレクティブを解釈します。フィールドの幅と精度は `printf 'C関数で指定することができます。 -printとは異なり、-printfは文字列の最後に改行を追加しません。エスケープとディレクティブは次のとおりです。

a

アラームベル。

b

バックスペース。

c

このフォーマットからの印刷を直ちに停止し、出力をフラッシュしてください。

f

フォームフィード。

n

改行

r

キャリッジリターン。

t

水平タブ。

v

垂直タブ。

\

リテラルのバックスラッシュ( ` ')。

NNN

ASCIIコードがNNN(8進数)の文字。

` '文字とそれに続く他の文字は、通常の文字として扱われるので、両方とも出力されます。

%%

リテラルのパーセント記号。

%a

ファイルの最後のアクセス時間は `ctime '関数によって返された形式で返されます。

%A k

ファイルの最終アクセス時刻は、 k これは `@ 'かCの` strftime'関数の指令です。可能な値は k 以下に列挙する。システム間の `strftime 'の違いのため、それらのいくつかはすべてのシステムで利用できないかもしれません。

@

1970年1月1日00:00 GMTからの秒数。

時間フィールド:

H

時間(00.23)

時(01.12)

k

時間(0..23)

l

時(1..12)

M

分(00..59)

p

ロケールのAMまたはPM

r

時間、12時間(hh:mm:ss AP M)

S

秒(00 … 61)

T

時間、24時間(hh:mm:ss)

バツ

ロケールの時間表現(H:M:S)

Z

時間帯(例えば、EDT)、または時間帯が特定できない場合は何もしない

日付フィールド:

a

ロケールの短縮曜日名(Sun..Sat)

A

ロケールの完全な曜日名、可変長(日曜日、土曜日)

b

ロケールの短縮月名(Jan..Dec)

B

ロケールのフル月名、可変長(January … Dec.)

c

ロケールの日時(Sat Nov 04 12:02:33 EST 1989)

d

月の日(01..31)

D

日付(mm / dd / yy)

h

bと同じ

j

日(001..366)

m

月(01.12)

U

週の最初の曜日(00..53)の日曜日の週番号

w

曜日(0..6)

W

週の最初の曜日(00..53)としての月の週番号

バツ

ロケールの日付表現(mm / dd / yy)

y

年の最後の2桁(00..99)

Y

年(1970年…)

%b

ファイルのサイズは512バイトブロック(切り上げ)。

%c

ファイルの最後の状態変更時刻は `ctime '関数によって返された形式になります。

%C k

ファイルの最後のステータス変更時刻は、 k これは%Aと同じです。

%d

ディレクトリツリー内のファイルの深さ。 0はファイルがコマンドライン引数であることを意味します。

%f

先頭のディレクトリが削除されたファイルの名前(最後の要素のみ)。

%F

ファイルが存在するファイルシステムのタイプ。この値は-fstypeに使用できます。

%g

ファイルのグループ名、またはグループに名前がない場合は数値のグループID。

%G

ファイルの数値グループID。

%h

ファイル名の先頭のディレクトリ(最後の要素を除く)。

%H

ファイルが見つかったコマンドライン引数。

%私

ファイルのinode番号(10進数)。

%k

ファイルのサイズは1Kブロック(切り上げ)です。

%l

シンボリックリンクのオブジェクト(ファイルがシンボリックリンクでない場合は空文字列)。

%m

ファイルのパーミッションビット(8進数)。

%n

ファイルへのハードリンクの数。

%p

ファイルの名前。

%P

削除されたコマンドライン引数の名前を含むファイルの名前。

%s

ファイルのサイズ(バイト)。

%t

Cの `ctime '関数が返す形式のファイルの最終更新時刻。

%T k

ファイルの最終更新時刻は、次の形式で指定します。 k これは%Aと同じです。

%u

ユーザーの名前がない場合は、ファイルのユーザー名または数値のユーザーID。

%U

ファイルの数値ユーザーID。

`% '文字とそれに続く他の文字は破棄されますが、他の文字は印刷されます。

-プルーン

-depthが指定されていない場合はtrueです。現在のディレクトリを降下しないでください。-depthが指定されている場合はfalseです。無効。

-ls

真;現在のファイルを `ls -dils '形式で標準出力に表示します。環境変数POSIXLY_CORRECTが設定されていない限り、ブロック数は1Kブロックです。この場合、512バイトのブロックが使用されます。

演算子

優先順位の低い順にリストされます:

( expr )

優先順位を強制する。

! expr

trueの場合 expr 偽です。

- なし expr

と同じ ! expr .

expr1 expr2

そして(暗に); expr2 が評価されない場合 expr1 偽です。

expr1 -a expr2

と同じ expr1 expr2 .

expr1 -そして expr2

と同じ expr1 expr2 .

expr1 -o expr2

または、 expr2 が評価されない場合 expr1 本当です。

expr1 または expr2

と同じ expr1 -o expr2 .

expr1 , expr2

リスト;両方 expr1 そして expr2 常に評価されます。の価値 expr1 廃棄される。リストの値は次の値です。 expr2 .

find / home -user joe

ユーザーjoeが所有する/ homeディレクトリ下のすべてのファイルを検索します。

find / usr -name * stat

/ usrディレクトリの下にあるすべてのファイルを ".stat"で終わるものを探します。

/ var / spool -mtime +60を見つける

60日以上前に変更された/ var / spoolディレクトリ下のすべてのファイルを検索します。

find / tmp -nameコアタイプf -print | xargs / bin / rm -f

名前付きファイルを検索するコア ディレクトリ内またはその下/ tmp それらを削除します。改行、一重引用符または二重引用符、またはスペースを含むファイル名がある場合、これは間違って動作することに注意してください。

/ tmp -nameコアタイプを見つけます。 xargs -0 / bin / rm -f

名前付きファイルを検索するコア ディレクトリ内またはその下/ tmp それらを削除し、一重引用符、二重引用符、スペースまたは改行を含むファイル名またはディレクトリ名が正しく処理されるようにファイル名を処理します。ザ-名 テストは-タイプ 電話する必要がないようにするためのテストstat(2) すべてのファイルに

見つける。 -t f -execファイル '{}' ;

現在のディレクトリ以下のすべてのファイルに対して `file 'を実行します。中括弧はシェルスクリプトの句読点として解釈されないように、一重引用符で囲まれています。セミコロンも同様にバックスラッシュの使用によって保護されますが、 ';'その場合にも使用されている可能性があります。

/ (-perm -4000 -fprintf /root/suid.txt '%#m%u%p n' )、 (-size + 100M -fprintf /root/big.txt '%-10s%p n' )

setuidのファイルとディレクトリをリストして、ファイルシステムを一度走査してください。/root/suid.txt 大きなファイルを/root/big.txt.

$ HOME -mtimeを見つける0

最後の24時間以内に変更されたホームディレクトリ内のファイルを検索します。このコマンドは、各ファイルが最後に変更されてからの経過時間を24時間で除算し、余りが破棄されるため、このように動作します。それは一致することを意味します-mtime

0ファイルは過去24時間以内に修正されなければなりません。

見つける。パーペム664

所有者とグループに対して読み取りと書き込みの許可を持っているが、ほかのユーザーは読み取りも書き込みもできないファイルを検索します。これらの基準を満たしていて他の権限ビットが設定されているファイル(たとえば、誰かがファイルを実行できる場合など)は一致しません。

見つける。 -perm -664

余分なパーミッションビット(例えば、実行可能ビット)の存在に関係なく、所有者とグループ、および他のユーザーが読み取ることができる読み取りおよび書き込み許可を持つファイルを検索します。たとえば、モード0777のファイルと一致します。

見つける。パーミル/ 222

誰か(その所有者、そのグループ、または誰か)が書き込み可能なファイルを検索します。

見つける。パーミル/ 220 見つける。 -perm / u + w、g + w 見つける。 -perm / u = w、g = w

これら3つのコマンドはすべて同じことを行いますが、最初のコマンドはファイルモードの8進表現を使用し、残りの2つはシンボリック形式を使用します。これらのコマンドはすべて、所有者またはそのグループのいずれかが書き込み可能なファイルを検索します。ファイルは、一致する所有者とグループの両方によって書き込み可能である必要はありません。いずれかを行います。

見つける。パーミル-220 見つける。 -perm -g + w、u + w

これらのコマンドはどちらも同じことを行います。所有者とそのグループの両方が書き込み可能なファイルを検索します。

見つける。 -perm-444 -perm / 222!パーミル/ 111 見つける。 -perm -a + r -perm / a + w! -perm / a + x

これらの2つのコマンドは、すべてのユーザーが読み取り可能なファイル(-perm -444または-perm -a + r)を検索し、少なくとも書き込みビットが設定されている(-perm / 222または-perm / a + w)誰か(!-perm / 111と!-perm / a + xそれぞれ)

重要: 使用 おとこ コマンド( % おとこ 特定のコンピュータでどのようにコマンドが使用されているかを確認することができます。