対象読者
● Linuxコマンド初学者
要点
● findコマンド = ファイルやディレクトリを探すコマンド
○ find {ファイルまでのパス・ディレクトリまでのパス}
のように利用する
● -name
, *
を利用する事で部分一致でファイル・ディレクトリを探す事が可能
findコマンドとは?
findコマンドは、ファイルやディレクトリを探す事ができるコマンドです。”find”が”見つける”などを意味するので覚えやすいですね。
findコマンドには様々なオプションが存在しますが、まずは完全一致での検索方法・部分一致での検索方法を押さえておけば問題無いのでそれぞれ見ていきましょう。
完全一致での検索方法
findコマンドでファイル名・ディレクトリ名の完全一致での検索方法は、find test_a.txt
のようにfind {ファイルまでのパス・ディレクトリまでのパス
}
という形式で利用します。ファイルコピーする事ができるコマンドです。パスの指定は絶対パス・相対パスどちらでも問題ありません。
実際に手を動かして確認しましょう。まずはターミナル(Windowsの場合git bashなど)を開いてください。
事前準備
まずは準備をします。touchコマンドを利用してデスクトップの階層にtest_a.txt
を新規作成します。次に、mkdirコマンドでtest
というディレクトリを作成し、その配下にtest_b.txt
を作成します。
正常に作成された事を確認したら準備完了です。
挙動確認
ではfindコマンドを実行してみましょう。まずは、test_a.txt
がデスクトップの階層に存在するか確認します。find test_a.txt
を実行します。
デスクトップ配下にtest_a.txt
が存在するため、test_a.txt
とターミナルに出力されます。
試しにfind test_b.txt
を実行してみましょう。
test_b.txt
はデスクトップ階層に存在しないため、”No such file or directory”というメッセージが出力されます。
前述の通り完全一致での検索の場合、ファイル・ディレクトリのパスが完全に一致する必要があります。test_b.txt
はデスクトップの階層ではなく、デスクトップの下のtest
という階層の中にあります。
よって、test_b.txt
を検索する場合、find ./test/test_b.txt
の様にパスを指定する必要があります。
ファイルが存在するため、test_b.txt
のパスがメッセージとして表示されました。
ただこの完全一致はあまり利用するケースはありません。何故なら、ファイル・ディレクトリのパスを指定する必要があり、パスを指定できるという事はわざわざfindコマンドで検索する必要が無いからです。
対象的に、部分一致の方法ではどのディレクトリに存在するか分からないファイルやディレクトリに対して検索を掛けられるので、非常に有用です。
部分一致での検索方法
部分一致での検索する場合は、find -name "*test*"
のようにfind -name "*{検索したいファイル名・ディレクトリ名}*"
という形式で利用します。-name
オプションを付与する事で*
を利用する事が出来ます。
*
の意味ですが、こちらは”任意の長さの文字列”を表します。つまり、"*test"
と指定すると、testという文字で終わる任意の長さのファイル・ディレクトリを指定する事になります。"*test*"
のようにtest
の前後に付ければ、test
という文字を含む任意の文字列を指定する事になります。
つまり、find -name "*test*"
のように利用する事で、パスの中にtest
という文字が含まれているファイル・ディレクトリを全て検索する事が可能となります。
例えばあるファイルがどこの階層にあるか分からない際、-name
と*
を利用する事でどこの階層に存在するかを探す事が出来ます。
こちらも実際に確認してみましょう。
挙動確認
test_b.txt
がどこの階層にあるか分からなくなってしまったケースを例に挙動を確認しましょう。
test_b.txt
がどこの階層に存在するか確認するには、find -name "*test_b.txt*"
を利用します。
test_b.txt
がtest
ディレクトリの下の存在する事が分かります。
他にもfind -name "*.txt"
とする事で、txtファイルを全て検索する事も可能です。
【次の記事】
grepコマンド