find - ファイル検索

トップ > チップス > find - ファイル検索
2012-02-13, find

/tips/linux/find **更新日付で検索 一週間(=7日)以上前に作成されたファイルを検索します。 :$ find . -ctime +7 -print 30分以内に作成されたファイルを検索します。 :$find . -cmin -30 数字のみの場合、その日数ちょうどを、「+」が付くとそれ以前、「-」がつくとそれ以降の指定となります。ctimeに加え、以下のatime,mtimeも利用することができます。 ,-ctime,{del:作成日時}(属性の)更新日時 ,-atime,アクセス日時 ,-mtime,更新日時

これらの属性の使い分けについては{link:stat}コマンドのタイムスタンプに関する説明を参照して下さい。

**ファイル名パターンで検索 カレントディレクトリ内で「200」で始まるファイルまたはディレクトリを検索します。「-prune」オプションがつくとサブディレクトリ内の検索はスキップされます。 :$ find . -name "200*" -prune -print\

**ファイルサイズで検索 サイズが0バイトのファイルを検索します。数字の後ろに「c」がつくことに注意して下さい(恐らく、characterのcらしい)。 :$ find . -size 0c

サイズが1M以上のファイルを検索します。 :$ find . -size +1M

**所有者で検索 ファイルの所有者で検索します。 :$ find . -user username

**それぞれのファイルに対してコマンドを実行する :$ find . -name -exec $\{COMMAND\} \{\} \\; >「-exec COMMAND ;」の解説 >COMMANDを実行する。コマンドの戻り値が 0 ならば真。 find のコマンドラインで指定されたこれ以降の引き数は、 ";" を含む引き数にいたるまで、すべて command の引き数とみなされる。文字列 "\{\}" は現在処理しているファイル名に置き換えられる。これは COMMAND引き数のどこにあってもよく、単独で置かれていなくてもよい (単独で置かれていなければならないような find もある)。これらの文字(特にセミコロン)はシェルによって展開されないよう、 "\" によってエスケープするか引用符で囲む必要がある。コマンドは find を実行したディレクトリから実行される。

**「-exec」オプションの引数を変数から作る場合の注意点 特殊記号を沢山使うのでややこしいです・・・。結局、うまく原理を説明できないのですが、以下のコードは正しく動きます(セミコロンの前にバックスラッシュがあるとエラーになります) 。 :COMMAND="find ./bin -exec echo \{\} ;" :$\{COMMAND\}

**条件の結合 :$ find . -name abc -and -type d 検索条件を AND で結ぶ。 (ただし、複数の検索条件を並べて書けば AND として扱われるので、明示しなくともよい)

:$ find . -name abc -or -type d 検索条件を OR で結ぶ。

:$ find . -not -name \*.txt -print 他の条件の前に付けて、条件を否定する。

**対象となる階層を制限する :$ find . -mindepth 1 -maxdepth 3 :./foo/bar1 :./foo/bar2 : : ※これらのオプションは-nameパラメタの手前で指定する必要があります。

**表示結果をカスタマイズする 以下は、「fooというディレクトリ中の拡張子がtxtのファイルを、サイズ付きで名前順にソートして表示」する例です。 :$ find -path "./foo/*.txt" -printf "%p\\\\t%s\\\\n" | sort ディレクトリ名も含めた名前の指定を行う場合「path」オプションを、結果の書式を制御する場合「-printf」オプション(アクション)を利用することができます。

**対象になったファイルを削除する 以下は30日以上前に更新されたファイルを削除する例です(問答無用で消えるので注意)。execとかxargsよりも簡単ですね。

:find . -mtime +30 -delete

**空のファイル・ディレクトリを探す 意外と便利です。

:find . -empty

**参考リンク -{link:http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html} -{link:http://www.sixnine.net/roadside/find.html} -{link:http://x68000.q-e-d.net/~68user/unix/pickup?find}

この記事は役に立ちましたか?