• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Find(1)
 

Find(1)

on

  • 1,907 views

4/10コマンドなんでも読書会で発表したfindコマンド資料

4/10コマンドなんでも読書会で発表したfindコマンド資料

Statistics

Views

Total Views
1,907
Views on SlideShare
786
Embed Views
1,121

Actions

Likes
0
Downloads
1
Comments
0

2 Embeds 1,121

http://d.hatena.ne.jp 1116
http://webcache.googleusercontent.com 5

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Find(1) Find(1) Presentation Transcript

    • find 1main.cfind.coption.coperator.cls.cfunction.cmisc.c
    • findの構造 2main(int argv, char **argc)main(int argv, char **argc) 1.オプションの解析 main.c 1.オプションの解析 main.c 2.PLAN* の作成 2.PLAN* の作成 PLAN *find_formplan(char *argv[]) PLAN *find_formplan(char *argv[]) find.c find.c PLAN *find_create(char ***argvp) PLAN *find_create(char ***argvp) option.c option.c OPTION *lookup_option(const char *name) OPTION *lookup_option(const char *name) option.c option.c int typecompare(const void *a, const void *b) int typecompare(const void *a, const void *b) option.c option.c 3.PLAN* の実行 3.PLAN* の実行 int find_execute(PLAN *plan, char *paths[]) int find_execute(PLAN *plan, char *paths[]) find.c find.c
    • 1.オプションの解析 3オプション⇒"EHLPXdf:sx"usage: find [-Husage: find [-H | | -L -L | | -P] -P] [-EXdsx] [-EXdsx] [-f path] path ... [-f path] path ... [expression] [expression] find [-H find [-H | | -L -L | | -P] -P] [-EXdsx] [-EXdsx] -f path [path ...] -f path [path ...] [expression] [expression]Manpageよりfind ユーティリティは、 pathname に対してディレクトリfind ユーティリティは、 pathname に対してディレクトリツリーを再帰的に下って、ツリー上の各ファイルについてツリーを再帰的に下って、ツリー上の各ファイルについてexpression (後に示す``プライマリと``演算子 から構expression (後に示す``プライマリと``演算子 から構成されます) で指定された処理を実行します。成されます) で指定された処理を実行します。
    • 2.オプションの種類 4オプションオプション 効果 効果 -regex および -iregex の後の正規表現を、基本正規表現(BRE)でなく拡張 -regex および -iregex の後の正規表現を、基本正規表現(BRE)でなく拡張 E E 正規表現として解釈。regexp_flags に 0001 を立てる。 正規表現として解釈。regexp_flags に 0001 を立てる。 直接指定された有効なシンボリックリンクを処理するときだけ、 リンク先をたど 直接指定された有効なシンボリックリンクを処理するときだけ、 リンク先をたど H H る。それ以外はたどらない。L、Pとは排他的。 る。それ以外はたどらない。L、Pとは排他的。 有効なシンボリックリンクをたどる。シンボリックリンクが無効なときはたどらな 有効なシンボリックリンクをたどる。シンボリックリンクが無効なときはたどらな L L い。H、Pとは排他的。 い。H、Pとは排他的。 シンボリックリンクをまったくたどらない。デフォルトの動作。H、Lとは排他的。 シンボリックリンクをまったくたどらない。デフォルトの動作。H、Lとは排他的。 P P xargs的に無効な文字(スペース、タブ、LF、バックスラッシュ、シングルクォー xargs的に無効な文字(スペース、タブ、LF、バックスラッシュ、シングルクォー X X ト、ダブルクォート)を含むパスは警告を出して、処理しない。 ト、ダブルクォート)を含むパスは警告を出して、処理しない。 深さ優先探索を行う。かといってデフォルトが幅優先かというとそうでもなく、デ 深さ優先探索を行う。かといってデフォルトが幅優先かというとそうでもなく、デ d d フォルトは”深さ優先探索だけどディレクトリを先に処理する版”。 フォルトは”深さ優先探索だけどディレクトリを先に処理する版”。 find が探索するファイル階層を指定する。引数を取る。が、-f自体書かなくても find が探索するファイル階層を指定する。引数を取る。が、-f自体書かなくても f f 同じ。 同じ。 探索時に、ディレクトリ内のファイルをアルファベット順に取得する。 探索時に、ディレクトリ内のファイルをアルファベット順に取得する。 s s 探索開始ディレクトリと違うファイルシステムを探索しないようにする。 探索開始ディレクトリと違うファイルシステムを探索しないようにする。 x x
    • 3.PLANの作成 5関数 find_formplan (find.c) PLAN * find_formplan(char *argv[])でPLAN(リスト)を作成PLAN *planPLAN *plan PLAN *tail PLAN *tail next next next next -print -print -exec -exec next next -ok -ok・最後のPLAN(*tail)は必ず -print、-exec、-okのどれかになる (find.c L117辺り~)・print、exec、okが指定されていないとき 勝手に()付きで -print が補われる・(や)も一つのPLANになる
    • 4.(),!,orの処理 6作成したリストから()、!、orを処理する。まず()を取り除く(サブプラン化する)。$ find . ( ! -newer hoge -or -user foo ) -print$ find . ( ! -newer hoge -or -user foo ) -print( next( next ! ! next next -newer hoge next -newer hoge next -or -or next next -user foo next -user foo next ) next ) next -print next -print next ()除外 ()除外 next next -print -print next next expr expr p_data p_data ! ! next next -newer hoge next -newer hoge next -or -or next next -user foo -user foo next next
    • 4.(),!,orの処理 7次に!の否定先をサブプランにする。 next next -print -print next nextexprexpr p_data p_data ! next ! next -newer hoge next -newer hoge next -or next -or next -user foo next -user foo next !処理 !処理 next next -print -print next nextexprexpr p_data p_data next next -or next -or next -user foo next -user foo next ! ! p_data p_data -newer hoge next -newer hoge next
    • 4.(),!,orの処理 8最後に-orを処理する。 next next -print -print next nextexprexpr p_data p_data next next -or next -or next -user foo next -user foo next ! ! p_data p_data -newer hoge next -newer hoge next -or処理 -or処理 next nextexprexpr -print next -print next p_data p_data next next next next -or p_data[0] -or p_data[0] ! ! p_data p_data -newer hoge next -newer hoge next p_data[1] p_data[1] -user foo next -user foo next