Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
find         1main.cfind.coption.coperator.cls.cfunction.cmisc.c
findの構造                                                         2main(int argv, char **argc)main(int argv, char **argc)   ...
1.オプションの解析                                                                 3オプション⇒"EHLPXdf:sx"usage: find [-Husage: find [...
2.オプションの種類                                      4オプションオプション                       効果                            効果        ...
3.PLANの作成                                       5関数 find_formplan (find.c) PLAN * find_formplan(char *argv[])でPLAN(リスト)を作成...
4.(),!,orの処理                                                              6作成したリストから()、!、orを処理する。まず()を取り除く(サブプラン化する)。$ fin...
4.(),!,orの処理                                                          7次に!の否定先をサブプランにする。       next       next            ...
4.(),!,orの処理                                                                8最後に-orを処理する。       next       next           ...
Upcoming SlideShare
Loading in …5
×

Find(1)

2,313 views

Published on

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

Published in: Business, Economy & Finance
  • Be the first to comment

  • Be the first to like this

Find(1)

  1. 1. find 1main.cfind.coption.coperator.cls.cfunction.cmisc.c
  2. 2. 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
  3. 3. 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 (後に示す``プライマリと``演算子 から構成されます) で指定された処理を実行します。成されます) で指定された処理を実行します。
  4. 4. 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
  5. 5. 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になる
  6. 6. 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
  7. 7. 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
  8. 8. 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

×