コマンドを使用する目的
特定のファイルを見つけ出すにはfindコマンド
が多用されるかと思います。今回の内容も、特段目新しいものではありません。
以下のコマンドは膨大なファイルから特定の関数が使用されているファイルを見つける
ために、職場の先輩から教わりました。
$ find . -name '*.php' | xargs grep '関数名'
以前からfindコマンドは利用していましたが、自分は単純にファイルを見つけるコマンド
としか捉えていませんでした。今回のように特定の関数を見つけ出す場合、該当ファイルを開いて地道にCtrl+F
で全文検索してましたから(´;ω;`)
個々のコマンドを知るのは大事ですが、どこでどういう目的で使用するのかも重要です。コマンドに限らず、独学だと使用目的のバリエーションが広がりにくいのが難点ですね。
忘れないうちに、各コマンドの解説とともにメモしておきます。
findコマンド
基本
ファイルを探すためのコマンドです。知名度高し。ファイルだけでなく、ディレクトリも検索対象になります。
.
でカレントディレクトリを指定すれば、カレントディレクトリ以下を検索します。
同じく1階層上にあるディレクトリは../../parents
、同階層にあるディレクトリは../brother
のように指定します。
$ find .
この状態で使用しても全てのファイル・ディレクトリが表示されるだけなので、ここから絞って行きます。
nameオプション
ファイル名・ディレクトリ名を指定して検索する場合に使用するオプションです。inameオプション
であれば、名前の大文字小文字は区別されません。
以下のコマンドで、カレントディレクトリにあるtest.html
が検索されます。
$ find . -name test.html
./test.html
ファイル名が一部しかわからない場合は、ワイルドカード
を使用します。*
は任意の文字列、?
は任意の1文字を意味します。
ワイルドカードを使用する場合は、必ずクォーテーション
で文字列を囲ってください。
$ find . -name 'test*'
./test2.html
./test001.html
./test.html
./testdir
typeオプション
ファイルの種類を指定します。-type d
でディレクトリのみ、-type f
でファイルのみを検索対象とすることができます。
以下のコマンドでは、名前がtest
で始まるディレクトリに限定して検索を行なっています。
$ find . -type d -name 'test*'
./testdir
grepコマンド
ファイル内の文字列を検索するコマンドです。nオプション
で行番号の表示ができます。
以下のコマンドでは、test.html
に対してtest
という文字列が存在する行を検索しています。この場合、クォーテーションの有無は関係ありません。
$ grep -n test test.html
7: <p>git_test</p>
vオプション
を指定すると、反対に指定する文字列が存在しない列を抽出します。
$ grep -n -v test test.html
1:<!DOCTYPE html>
2:<html lang="ja">
3: <head>
4: <meta charset="UTF-8">
5: </head>
6: <body>
8:
9:
10: </body>
11:</html>
xargsコマンド
前のコマンドから実行結果(標準入力)を受け取り、それを次のコマンドで引数として扱います。単体で使用するのではなく、その引数を利用するコマンドも指定します。
仮にxgargs grep
と指定した場合、前のコマンドで出力されたファイルを引数にしてgrepコマンドが実行されます。
合わせてパイプライン(前のコマンドの標準出力を、別のコマンドの標準入力につなぐ)
という機能が使用されています。
コマンドの意味
$ find . -name '*.php' | xargs grep '関数名'
処理の流れはこんな感じです。
-
findコマンド
でカレントディレクトリからphpファイルを探す。 - 1.の結果を引数にして
grepコマンド
を実行する。 -
grepコマンド
で、指定した関数名を含むファイルを見つけ出す。
様々な場所や状況で利用できるコマンドです(^ω^)