SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

業務でラクするためのUNIXテクニック集

find/grep/xargsコマンドを使いこなす
業務で楽するためのUNIXテクニック集「検索」編

第1回


  • X ポスト
  • このエントリーをはてなブックマークに追加

複雑な条件でファイル・ディレクトリを検索する(findコマンド)

 findコマンドは、ディレクトリツリーの中からファイルを探し出すことができる、大変強力で複雑なコマンドです。

$ find [パス][式(オプション、判別式、アクション)]

 「式」は、オプション、判別式およびアクションの組み合わせからなります。

※注1

 findコマンドは、OSによって使用可能なオプションが異なります。例えば、SolarisなどのOSでは、以降で紹介する例の多くが使用できません(参考ページ:「find」SunOSリファレンスマニュアル1

findコマンドの代表的なオプション

 findコマンドの代表的なオプションを表にまとめておきます。

オプション 意味
-follow シンボリックリンクの参照先を検索する
-maxdepth n ディレクトリの深さを指定して検索する。n=0ならサブディレクトリは検索しない
-mindepth n ディレクトリの深さを指定して検索する。n=1なら指定したディレクトリ自身は検索せず、サブディレクトリ以下を検索する
例)ルートディレクトリ「/」から、2 階層目までを検索して表示する
$ 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] ファイルの所有者が、指定したユーザであれば真

 次のように、検索開始ディレクトリを複数指定して検索することができます。

例)「/usr/local/bin」「/usr/bin」「/bin」以下の全ファイルを検索する
$ 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] ファイルの最終更新日付が、指定したファイルの最終更新日付より新しければ真
例)ファイルの最終更新日が3日より前のファイルを検索する
$ 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コマンドの代表的なアクション

 アクションは次のものが指定可能です。

アクション 機能
-print 検索結果を標準出力する。このとき結果をフルパスで表示する。デフォルトなので省略可
-fprint ファイル名 検索結果を「ファイル名」に出力する。このとき結果はフルパスで表示される
-exec コマンド '{}' \; 検索後、コマンドを実行する。このとき「{}」が検索されたファイル名に置き換えられます。最後は「\;」のようにエスケープシーケンスを使用する必要がある
-exec コマンド '{}' + 検索後、コマンドを実行する。このとき、「{}」がファイル名のグループに置き換えられる
-ok コマンド \; -execと同様に検索後コマンドを実行する。ただし、ユーザーに問い合わせる

次のページ
検索結果に対するコマンドの実行(find -exec/xargsコマンド)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
業務でラクするためのUNIXテクニック集連載記事一覧

もっと読む

この記事の著者

保田和隆(ヤスダカズタカ)

Yasuda Kazutakaネットワーク関連の組み込みソフトウェア開発者。http://uguisu.skr.jp/Windows/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3279 2008/12/22 16:25

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング