複雑な条件でファイル・ディレクトリを検索する(findコマンド)
find
コマンドは、ディレクトリツリーの中からファイルを探し出すことができる、大変強力で複雑なコマンドです。
$ find [パス][式(オプション、判別式、アクション)]
「式」は、オプション、判別式およびアクションの組み合わせからなります。
find
コマンドは、OSによって使用可能なオプションが異なります。例えば、SolarisなどのOSでは、以降で紹介する例の多くが使用できません(参考ページ:「find」SunOSリファレンスマニュアル1)
findコマンドの代表的なオプション
find
コマンドの代表的なオプションを表にまとめておきます。
オプション | 意味 |
---|---|
-follow | シンボリックリンクの参照先を検索する |
-maxdepth n | ディレクトリの深さを指定して検索する。n=0ならサブディレクトリは検索しない |
-mindepth n | ディレクトリの深さを指定して検索する。n=1なら指定したディレクトリ自身は検索せず、サブディレクトリ以下を検索する |
$ find / -maxdepth 2 / /home /home/yasuda (略) /usr /usr/local (略)
0、1階層目も表示されることに注意して下さい。
findコマンドの代表的な判別式
find
コマンドの代表的な判別式を表にまとめておきます。
findコマンドの検索条件を指定する代表的な判別式(基本)
判別式 | 意味 |
---|---|
-name [pattern] | ファイル名が指定したパターンと一致すれば真。シェルのワイルドカードが指定できる |
-path [pattern] | パス名が指定したパターンと一致すれば真。シェルのワイルドカードが指定できる |
-regex [pattern] | ファイル名が正規表現で指定したパターンと一致すれば真 |
-type [filetype] | ファイルが指定したファイル種別と一致すれば真 d(ディレクトリ) f(通常のファイル) l(シンボリックリンク) |
-group [group] | ファイルの所有グループが、指定したグループと一致すれば真 |
-user [user] | ファイルの所有者が、指定したユーザであれば真 |
次のように、検索開始ディレクトリを複数指定して検索することができます。
$ find /usr/local/bin /usr/bin /bin -type f /usr/local/bin/perldoc /usr/local/bin/perlivp (略)
findコマンドの検索条件を指定する代表的な判別式(日時)
判別式 | 意味 |
---|---|
-atime | (+/-)n 最終アクセス日がn日前なら真 +nの場合:n日より大きい -nの場合:n日より小さい |
-mtime | (+/-)n ファイルの最終更新日付がn日前なら真 +nの場合:n日より大きい -nの場合:n日より小さい |
-mmin | (+/-)n ファイルの最終更新日時n分前なら真 +nの場合:n日より大きい -nの場合:n日より小さい |
-newer [file name] | ファイルの最終更新日付が、指定したファイルの最終更新日付より新しければ真 |
$ date Fri Nov 21 13:48:19 JST 2008 $ ls -l total 0 -rw-r--r-- 1 root root 0 Nov 20 13:30 test1.txt -rw-r--r-- 1 root root 0 Nov 19 13:30 test2.txt -rw-r--r-- 1 root root 0 Nov 18 13:30 test3.txt $ find . -mtime +3 ./test3.txt
findコマンドの検索条件を指定する代表的な判別式(サイズ)
判別式 | 意味 |
---|---|
-empty | ファイルが空なら真 |
-size n[c/k/b] | nサイズのファイルであれば真 c バイト k キロバイト b ブロック(1ブロック=512バイト) |
findコマンドの検索条件を指定する代表的な判別式(アクセス権)
判別式 | 意味 |
---|---|
-perm mode | ファイルのアクセス権がmodeと一致すれば真 |
-perm -mode | modeで指定されているアクセス権の全てが許可されていれば真 |
-perm +mode | modeで指定されているアクセス権の一部が許可されていれば真 |
次の例では、カレントディレクトリ以下にある、アクセス属性が644(-rw-r--r--)のファイルを検索・表示します。
$ find . -perm 644 ./.cshrc ./.login ./.login_conf (略)
findコマンドの代表的な演算子
判別式は次のような演算子で条件を追加できます。
演算子 | 機能 |
---|---|
\( 判別式 \) | 括弧のなかを優先的に判別する |
! 判別式 | 判別式が異なる場合、検索対象となる。「-not 判別式」も同じ |
判別式1 -a 判別式2 | 判別式1と判別式2をandで評価する。「判別式1 -and 判別式2」や「判別式1 判別式2」も同じ |
判別式1 -o 判別式2 | 判別式1と判別式2をorで評価する。「判別式1 -or 判別式2」も同じ。 |
findコマンドの代表的なアクション
アクションは次のものが指定可能です。
アクション | 機能 |
---|---|
検索結果を標準出力する。このとき結果をフルパスで表示する。デフォルトなので省略可 | |
-fprint ファイル名 | 検索結果を「ファイル名」に出力する。このとき結果はフルパスで表示される |
-exec コマンド '{}' \; | 検索後、コマンドを実行する。このとき「{}」が検索されたファイル名に置き換えられます。最後は「\;」のようにエスケープシーケンスを使用する必要がある |
-exec コマンド '{}' + | 検索後、コマンドを実行する。このとき、「{}」がファイル名のグループに置き換えられる |
-ok コマンド \; | -execと同様に検索後コマンドを実行する。ただし、ユーザーに問い合わせる |