【Linuxコマンド基礎】findでファイルを探す

こんにちは。Linuxコマンドの基礎的な使い方を解説していきます。今回取り上げるのはfindコマンドです。findを参考書で勉強すると様々なオプションがあり、便利なコマンドなんだと思います。その反面、オプション覚えるの大変そうなので何となく難しそうな印象を持ってしまうこともあります。今回は、findコマンドでファイルを検索するのに困らない最低限のことを解説していきたいと思います。

今回やりたいこと

ファイル名が「ぼんやり」わかっているけど、ディレクトリの中のどこにあるか分からない。というシーンを想定しています。findを使ってファイルを検索していきます。

今回使うフォルダは以下の通りです。aaaa-1配下に保存したfoo20210701.txtを検索したいとして、ファイル名のうちfooだけがわかっている状態です。また、ファイルはsampleフォルダの配下にあることは判っています。

sample/
 aaaa/
  aaaa-1/
   foo20210701.txt
  aaaa-2/
 bbbb/
  foobar/
  

以下のコマンドを順に実行することで上述の状態にすることができます。

mkdir sample
mkdir sample/aaaa
mkdir sample/aaaa/aaaa-1
mkdir sample/aaaa/aaaa-2
touch sample/aaaa/aaaa-1/foo20210701.txt
mkdir sample/bbbb
mkdir sample/bbbb/foobar

コマンドの書き方

sampleに移動して以下のコマンドを実行します。

$ find . -name 'foo*'
./aaaa/aaaa-1/foo20210701.txt
./bbbb/foobar

findコマンドの第一引数には対象のディレクトリを設定します。ここで設定したディレクトリ配下のファイルを全て検索するという意味になります。次にファイル名が判っているので-nameオプションを指定します。-nameオプションには検索したファイル名を指定することができます。ワイルドカードを使えるのでfoo*としてみました。これでfooで始まるファイル、ディレクトリを検索するという意味となります。

検索した結果、bbbbフォルダ配下にあるfoobarというディレクトも検索されてしまいました。今回探したいのはファイルですので、ファイルに限定して検索をしたいです。そこで-typeというオプションを追加してfという値を与えることにします。fはファイル、dはディレクトリのみを検索対象にするという意味になります。

$ find . -name 'foo*' -type f
./aaaa/aaaa-1/foo20210701.txt

今度は目的のファイルのみが表示されました。結果には現在のフォルダからのファイルパスが表示されます。

まとめ

今回はfindを使ってファイル名を指定して検索するしてみました。ファイル名が判っているけど保存場所が分からないというのは、日常生活でよく遭遇するので、それに絞って解説してみました。

Linux

Posted by kobainmac