ファイル検索を行える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