SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
find         1
main.c
find.c
option.c
operator.c
ls.c
function.c
misc.c
findの構造                                                         2
main(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 [-H
usage: 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 *plan
PLAN *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
                                                                    next
expr
expr
       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
                                                                    next
expr
expr
       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
                                                                          next
expr
expr
       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
       next
expr
expr                                                      -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

Contenu connexe

Tendances

Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
 
すごいHaskell読書会#10
すごいHaskell読書会#10すごいHaskell読書会#10
すごいHaskell読書会#10
Shin Ise
 
Start haskell zipper
Start haskell zipperStart haskell zipper
Start haskell zipper
Shoko Sasaki
 

Tendances (20)

C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
 
Sml#探検隊
Sml#探検隊Sml#探検隊
Sml#探検隊
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみようC++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
 
MP in Haskell
MP in HaskellMP in Haskell
MP in Haskell
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Extensible Eff Applicative
Extensible Eff ApplicativeExtensible Eff Applicative
Extensible Eff Applicative
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
 
Ocaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axshOcaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axsh
 
すごいHaskell読書会#10
すごいHaskell読書会#10すごいHaskell読書会#10
すごいHaskell読書会#10
 
Start haskell zipper
Start haskell zipperStart haskell zipper
Start haskell zipper
 

Similaire à Find(1) (6)

Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with Haskel
 
C-langage
C-langageC-langage
C-langage
 
Adding simpl GVN path into GHC
Adding simpl GVN path into GHCAdding simpl GVN path into GHC
Adding simpl GVN path into GHC
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 

Plus de akitsukada

データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングデータベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
akitsukada
 
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
akitsukada
 

Plus de akitsukada (20)

Solutions Architect, Exciting Career for Engineers
Solutions Architect, Exciting Career for EngineersSolutions Architect, Exciting Career for Engineers
Solutions Architect, Exciting Career for Engineers
 
Morning Session - AWS Serverless Ways
Morning Session - AWS Serverless WaysMorning Session - AWS Serverless Ways
Morning Session - AWS Serverless Ways
 
AWS Introduction for Startups
AWS Introduction for StartupsAWS Introduction for Startups
AWS Introduction for Startups
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422
 
Amazon Cognito Deep Dive @ JAWS DAYS 2016
Amazon Cognito Deep Dive @ JAWS DAYS 2016Amazon Cognito Deep Dive @ JAWS DAYS 2016
Amazon Cognito Deep Dive @ JAWS DAYS 2016
 
AWS Mobile Maniacs
AWS Mobile ManiacsAWS Mobile Maniacs
AWS Mobile Maniacs
 
My Startup Learnings (短縮版)
My Startup Learnings (短縮版)My Startup Learnings (短縮版)
My Startup Learnings (短縮版)
 
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
 
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
 
AWS for Startups 2016 (2015/12/02版)
AWS for Startups 2016 (2015/12/02版)AWS for Startups 2016 (2015/12/02版)
AWS for Startups 2016 (2015/12/02版)
 
Awsjpcasestudies
AwsjpcasestudiesAwsjpcasestudies
Awsjpcasestudies
 
Mobile Hubで変わる、アプリ開発最前線
Mobile Hubで変わる、アプリ開発最前線Mobile Hubで変わる、アプリ開発最前線
Mobile Hubで変わる、アプリ開発最前線
 
Auto Scaling x Spot Instances によるスケーラビリティと コストカット
Auto Scaling x Spot Instances によるスケーラビリティと コストカットAuto Scaling x Spot Instances によるスケーラビリティと コストカット
Auto Scaling x Spot Instances によるスケーラビリティと コストカット
 
20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup
 
Little tips ios
Little tips iosLittle tips ios
Little tips ios
 
データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングデータベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
 
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
 
Printf
PrintfPrintf
Printf
 
With git
With gitWith git
With git
 
Find(ラスト)
Find(ラスト)Find(ラスト)
Find(ラスト)
 

Dernier

Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
Yasuyoshi Minehisa
 
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
Michael Rada
 

Dernier (8)

202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
 
事例DBサービス紹介資料(Case Study DB service introduction)
事例DBサービス紹介資料(Case Study DB service introduction)事例DBサービス紹介資料(Case Study DB service introduction)
事例DBサービス紹介資料(Case Study DB service introduction)
 
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
 
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
 
共有用_aio基本保守プラン_WordPressサイト_20240509.pdf
共有用_aio基本保守プラン_WordPressサイト_20240509.pdf共有用_aio基本保守プラン_WordPressサイト_20240509.pdf
共有用_aio基本保守プラン_WordPressサイト_20240509.pdf
 
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
 
company profile.pdf
company profile.pdfcompany profile.pdf
company profile.pdf
 

Find(1)

  • 1. find 1 main.c find.c option.c operator.c ls.c function.c misc.c
  • 2. findの構造 2 main(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. 1.オプションの解析 3 オプション⇒"EHLPXdf:sx" usage: find [-H usage: 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. 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. 3.PLANの作成 5 関数 find_formplan (find.c) PLAN * find_formplan(char *argv[]) でPLAN(リスト)を作成 PLAN *plan PLAN *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. 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. 4.(),!,orの処理 7 次に!の否定先をサブプランにする。 next next -print -print next next expr expr 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 next expr expr 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. 4.(),!,orの処理 8 最後に-orを処理する。 next next -print -print next next expr expr 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 next expr expr -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