今回はLinuxのファイルを探す『find』コマンドについて解説していきます。
findコマンドは下記の要素を組み合わせて使います。
find (①検索を開始するディレクトリ) (②検索条件) (③アクション)
①検索を開始するディレクトリ
どこを基準にして検索したいファイルのパスを表示するか決めることができます。例えば今いるディレクトリ(カレントディレクトリ)からのパスで表示したければ、『.(ドット)』を指定してあげます。
②検索条件
ファイルの名前で検索するのか、タイプ(.txtなど)で探すのか選ぶことができます。
- -name (検索したいファイル名)
→ファイル名を大文字・小文字で区別する - -iname (検索したいファイル名)
→ファイル名を大文字・小文字で区別しない - -type (検索したいファイルの種類)
→.txtや.rbなどファイルの拡張子で検索できる
③アクション
アクションの種類は様々ですが、ひとまず「-print」のみ覚えておきましょう。このアクションを指定することで、検索対象のフィルダのパスを表示してくれます。
では下記コマンドをターミナルで順番に実行して、findコマンドをしようしてみましょう。
sample.txtというファイルを「workdir」と「doc」という2つのディレクトリの配下に作成します。
cd
mkdir workdir
cd workdir
mkdir doc
touch sample.txt doc/sample.txt
find . -name sample.txt -print
//実行結果
./doc/sample.txt
./sample.txt
sample.txtのカレントディレクトリからのパスを検索できました!
また検索するファイル名を指定せずに検索することもできます。
下の例では、任意の文字列.txtというファイル全てを表示させています。
任意の文字列は『*』しており、正規表現でも同じような意味になります。
cd
cd workdir
find . -name '*.txt' -print
//実行結果
./doc/sample.txt
./sample.txt
続いてファイルの種類で検索する方法について解説します。冒頭で説明した②検索条件を下記のように変更することで、検索するファイルを選択できます。
- -type f
→通常のファイル - -type d
→ディレクトリ
cd
cd workdir
find . -type d -print
//実行結果
.
./doc
実行結果の「.(ドット)」はカレントディレクトリの意味です。今回の例で言うと、workdirというディレクトリを指します。
ファイルの名前とタイプ両方で検索することも可能です。例をみてみましょう。
cd
cd workdir
find . -type f -a -name '*.txt' -print
//実行結果
./doc/sample.txt
./sample.txt
上の例では、通常ファイルかつ拡張子がtxtのファイルを検索しています。
-a:ANDの意味で、省略可能です。