ファイル検索を行えるfindコマンドの使い方。ファイル名、日付、ファイルサイズ検索

ファイル検索を行えるfindコマンドの使い方。ファイル名、日付、ファイルサイズ検索

今回はLinuxコマンドでも使いこなせるようになると特に便利なfindコマンドについて説明していきます。

findはコマンドの名前の通り、オプションなどで指定した条件に合致したファイルやディレクトリを検索することができます。 findコマンドは他のlsやcdなどのコマンドより多少オプションの指定の仕方が複雑なので覚えづらいですが、よく使うケースを説明していくので的を絞って使い方をマスターできると良いでしょう。

基本的な使い方 | ファイル名での検索

まず基本の使い方ですが、findコマンドでは第一引数で検索するディレクトリを指定する必要があります。(ないとエラーになります。) 例では、カレントディレクトリ内での検索です。この例では、オプションで絞り込み条件を指定していないのでカレントディレクトリ以下のファイルが 全て出力されます。

$ find ./
./
.//fuga.txt
.//hoge.txt
.//HelloWorld.js
.//bar.txt
.//dir1
.//dir1/subdir3
.//dir1/subdir2
.//dir1/subdir1
.//dir1/subdir1/hoge.text

ファイルの一覧でファイルの権限やタイムスタンプなども表示したい場合はlsオプションを付加します。

$ find ./ -ls
8609511803        0 drwxr-xr-x    7 admin            staff                 224 11 15 09:19 ./
8609709380        8 -rw-r--r--    1 admin            staff                   5 11 15 09:11 .//fuga.txt
8609710041        8 -rw-r--r--    1 admin            staff                  52 11 15 09:19 .//hoge.txt
8609709623        8 -rw-r--r--    1 admin            staff                  25 11 15 09:14 .//HelloWorld.js
8609709389        8 -rw-r--r--    1 admin            staff                   4 11 15 09:11 .//bar.txt
8609511809        0 drwxr-xr-x    5 admin            staff                 160 11 13 08:22 .//dir1
8609511818        0 drwxr-xr-x    2 admin            staff                  64 11 13 08:22 .//dir1/subdir3
8609511817        0 drwxr-xr-x    2 admin            staff                  64 11 13 08:22 .//dir1/subdir2
8609511816        0 drwxr-xr-x    3 admin            staff                  96 11 13 08:22 .//dir1/subdir1
8609511840        0 -rw-r--r--    1 admin            staff                   0 11 13 08:22 .//dir1/subdir1/hoge.text

さらっと紹介しましたが、findコマンドはこのlsオプションのように指定ディレクトリのあとにオプションを付加することで絞り込み条件を指定します。 詳しい種類は次のセクションで説明します。

ファイル名での検索 | nameオプション

ファイル名で検索を行いたい場合は、nameオプションを指定します。-nameとした後に任意のファイル名を与えます。findメソッドではサブディレクトリまで検索できるので、どこにあるか検討も使いないファイルを検索したい時に便利です。私もよく初心者の頃はミドルウェアの設定ファイルのいどころがわからないのでルートディレクトリ指定でfindメソッド叩いていたりしました。

$ find ./ -name hoge.text
.//dir1/subdir1/hoge.text

*(ワイルドカード)を使えば下のような曖昧検索もできます。

$ find ./ -name 'hoge*'
.//hoge.txt
.//dir1/subdir1/hoge.text

 

ファイルタイプでの検索 | typeオプション

ファイルタイプで検索を行う場合は、typeオプションを使用します。ファイル検索の場合は、typeの後にfを、ディレクトリを検索したい場合はtypeの後にdをつけます。

ファイル検索

 

$ find ./ -type f
.//fuga.txt
.//hoge.txt
.//HelloWorld.js
.//bar.txt
.//dir1/subdir1/hoge.text

 

ディレクトリ検索

$ find ./ -type d
./
.//dir1
.//dir1/subdir3
.//dir1/subdir2
.//dir1/subdir1

後で説明する、複数条件での検索も駆使すれば、〇〇というファイル名のディレクトリという検索の仕方も可能です。

複数条件での検索 | -aオプション, -oオプション

複数条件での検索を行う場合はaオプションとoオプションを使います。andとorにそったオプション名なので、-aをつければAND条件,-oをつければOR条件です。

hogeという文字を含む AND ファイル

$ find ./ -type f -a -name 'hoge*'
.//hoge.txt
.//dir1/subdir1/hoge.tex

 

拡張子がtxt OR js

$ find ./ -name '*.txt' -o -name '*.js'
.//fuga.txt
.//hoge.txt
.//HelloWorld.js
.//bar.txt

 

修正日付での検索 | mtime, mminオプション

findコマンドでは最後に修正した日付でも検索することができます。

一日以内に修正ししたファイル

 

$ find ./ -mtime -1
./
.//newfile.txt

 

一日より前に修正ししたファイル

$ find ./ -mtime +1
.//fuga.txt
.//hoge.txt
.//HelloWorld.js
.//bar.txt
.//dir1
.//dir1/subdir3
.//dir1/subdir2
.//dir1/subdir1
.//dir1/subdir1/hoge.text

-mtimeでは日単位で検索しますが、-mminオプションもありそれでは分単位で検索をかけることができます。

ファイルサイズでの検索 | sizeオプション

ファイルサイズで検索をかける場合はsizeオプションをつけます。これで指定したディレクトリで重いファイルなどもすぐに検索することができます。

ファイルサイズの単位は文字列で表すことができKBはk,Byteはcを数字の後につけてあげます。

$ find ./ -size +100c

 

$ find ./ -size -100c

 

$ find ./ -size +100k

 

$ find ./ -size -100k

 

まとめ

ここまでざっと説明しましたが、いかがでしたでしょうか?ちなみに僕がよく使うのはファイル名での検索とファイルサイズの検索などです。ファイルサイズの検索とファイルサイズの条件でPCのディスクの容量が逼迫した時に重いファイルを検索するために使ったりもします。findコマンドは本当にオプションで複雑な検索ができるので、細かいところは調べながらで良いですがここに書いたような使い方はある程度使えるようになっているとよいでしょう。