1. find コマンドの一般的な形式は次のとおりです。
find pathname -options [-print -exec -ok ...]
2. find コマンドのパラメータ: によって検索されるディレクトリ パス。検索コマンド。たとえば、現在のディレクトリを表すには . を使用し、システム ルート ディレクトリを表すには / を使用します。
-print: find コマンドは、一致するファイルを標準出力に出力します。
-exec: find コマンドは、一致するファイルに対してこのパラメーターで指定されたシェル コマンドを実行します。対応するコマンドは「command」{ } ; の形式になります。{ } と ; の間のスペースに注意してください。
-ok: -exec と同じ機能がありますが、このパラメーターで指定されたシェル コマンドをより安全なモードで実行する点が異なります。各コマンドを実行する前に、ユーザーが実装するかどうかを決定するためのプロンプトが表示されます。
3. コマンドオプションの検索
-name
ファイル名でファイルを検索します。
-perm
権限に基づいてファイルを検索します。
-prune
このオプションを使用すると、現在指定されているディレクトリ内で find コマンドが検索されないようにすることができます。 - Depth オプションも使用されている場合、-prune は find コマンドによって無視されます。
-user
所有者に従ってファイルを検索します。
-group
所属するグループごとにファイルを検索します。
-mtime -n +n
変更時刻に従ってファイルを検索します。 - n はファイル変更時刻が今から n 日以内であることを意味し、+ n はファイル変更時刻が今から n 日前であることを意味します。 find コマンドには -atime オプションと -ctime オプションもありますが、それらは -m time オプションと同じです。
-nogroup
所属する有効なグループがないファイル、つまり、ファイルが所属するグループが /etc/groups に存在しないファイルを検索します。
-nouser
は、有効な所有者のないファイルを検索します。つまり、ファイルの所有者が /etc/passwd に存在しません。
-newer file1 ! file2
変更時刻が file1 より新しく、file2 より古いファイルを検索します。
-type
次のような特定のタイプのファイルを検索します:
b - ブロックデバイスファイル。
d - ディレクトリ。
c - キャラクターデバイスファイル。
p - パイプファイル。
l - シンボリック リンク ファイル。
f - 通常のファイル。
-size n: [c] ファイル長が n ブロックのファイルを検索します。c では、ファイルの長さはバイト単位です。 - Depth: ファイルを検索するときは、まず現在のディレクトリでファイルを検索し、次にそのサブディレクトリでファイルを検索します。
-fstype: 特定のタイプのファイル システムにあるファイルを検索します。これらのファイル システム タイプは通常、構成ファイル /etc/fstab にあります。この構成ファイルには、このシステムのファイル システムに関する情報が含まれています。
-mount: ファイルを検索するときにファイル システムのマウント ポイントを越えないでください。
-follow: find コマンドでシンボリック リンク ファイルが見つかった場合、そのリンクが指すファイルをたどります。
-cpio: 一致するファイルに対して cpio コマンドを使用して、これらのファイルをテープ デバイスにバックアップします。
さらに、次の 3 つの違い:
-amin n
システム内の過去 N 分間にアクセスされたファイルを検索する
-atime n
システム内の過去 n*24 時間にアクセスされたファイルを検索するシステム
-cmin n
システム内で過去 N 分間にファイルステータスが変更されたファイルを検索します
-ctime n
システム内で過去 n*24 時間にファイルステータスが変更されたファイルを検索します
-mmin n
システム内で過去 N 分間にファイル ステータスが変更されたファイルを検索します。 データ ファイル
-mtime n
システム内で過去 n*24 時間以内にファイル データが変更されたファイルを検索します
4. exec または ok を使用してシェルコマンドを実行します
find コマンドを使用する場合は、必要な操作をファイルに記述するだけです。一部のオペレーティング システムでは、exec を使用して検索することができます。 -exec オプションは、ls や ls -l などのコマンドを実行します。ほとんどのユーザーは、このオプションを使用して古いファイルを見つけて削除します。実際に rm コマンドを実行してファイルを削除する前に、ls コマンドを使用して、削除対象のファイルであることを確認することをお勧めします。
exec オプションの後には、実行するコマンドまたはスクリプトが続き、次に { } のペア、スペース、および最後にセミコロンが続きます。 exec オプションを使用するには、print オプションも使用する必要があります。 find コマンドを確認すると、このコマンドは現在のパスからの相対パスとファイル名のみを出力することがわかります。
例: ls -l コマンドを使用して一致したファイルをリストするには、検索コマンドの -exec オプションに ls -l コマンドを追加します
# find 。 { } ;
-rw-r--r-- 1 ルート root 34928 2003-02-25 ./conf/httpd.conf
-rw-r--r-- 1 ルート root 12959 2003-02-25 ./conf/ magic
-rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README
上記の例では、find コマンドは現在のディレクトリ内のすべての通常のファイルと一致します。そして- exec オプションで ls -l コマンドを使用して、それらをリストします。
5 日以上前に変更された /logs ディレクトリ内のファイルを見つけて削除します:
$ find logs -type f -mtime +5 -exec rm { } ;
覚えておいてください: シェル内で必ず削除してください。ファイルを提出する前に、まず対応するファイルを確認する必要があるので、注意してください。 -exec オプションを指定したセーフ モードは、mv や rm などのコマンドを使用するときに使用できます。一致する各ファイルを操作する前にプロンプトが表示されます。
次の例では、find コマンドは、ファイル名が .LOG で終わり、変更時間が 5 日を超えている現在のディレクトリ内のすべてのファイルを検索して削除しますが、削除する前にプロンプトが表示されます。
$ 検索 . -name "*.conf" -mtime +5 -ok rm { } ;
< rm ... ./conf/httpd.conf > n
ファイルを削除するには y キーを押し、削除しない場合は n キーを押します。
-exec オプションを使用すると、任意の形式のコマンドを使用できます。
次の例では grep コマンドを使用します。 find コマンドは、まず passwd、passwd.old、passwd.bak などの「passwd*」という名前のすべてのファイルと一致し、次に grep コマンドを実行して、これらのファイルに sam ユーザーが存在するかどうかを確認します。
# find /etc -name "passwd*" -exec grep "sam" { } ;
sam:x:501:501::/usr/sam:/bin/bash