LinuC Level1 v10.0 対策コース(パート1)19/39
Linuxコマンド [find編]
こちらの記事ではLinuxコマンドのfindについて解説します。
findコマンドをうまく利用することにより、ファイルの検索が容易になります。
Linuxの必須コマンドの1つですので是非勉強してみてください。
findコマンドとは
findは、ファイルやディレクトリなどを検索するためのコマンドです。
まずは基本的な使い方を見ていきましょう。
基本書式
find 検索場所 [オプション] 検索ファイル名
基本的な使い方
find ./ example.txt
上の例ではディレクトリとサブディレクトリ(ディレクトリ内のディレクトリ)の中にあるexample.txtというファイルを探します。
主なオプション
| オプション | 説明 |
|---|---|
| -name | ファイル名やディレクトリ名を指定して検索します。大文字と小文字を区別します。大文字と小文字を区別しないものに-inameがあります。 |
| -type | ファイル・ディレクトリ・シンボリックリンクなど、検索対象のタイプを指定できます |
| -atime | ファイルにアクセスした日数を指定して検索ができます |
| -mtime | ファイルを更新した日数を指定して検索ができます |
| -ctime | ファイルのデータとステータスが修正された日数を指定して検索ができます |
| -amin | ファイルにアクセスした分(minutes)数を指定して検索ができます |
| -mmin | ファイルを更新した分数を指定して検索ができます |
| -cmin | ファイルのデータとステータスが修正された分数を指定して検索ができます |
| -empty | 空のファイルやディレクトリを検索します |
| -size | ファイルやディレクトリのサイズを指定して検索できます |
| -perm | 特定の権限(permission)をもつファイルを検索できます |
それでは、それぞれのオプションの利用方法を見ていきましょう。
1. -name: ファイル名やディレクトリ名を指定して検索する
find ./ -name \*.go
main.go
main1.go
指定したディレクトリにあるファイル名に.goが付いたファイルを探します。-nameは大文字と小文字を区別します。.goの前にある*はワイルドカード と言い、特殊文字です。-nameで特殊文字を使用する際には特殊文字の前に\(バックスラッシュ)を付ける必要があります。
また、-nameによく似たオプションに -inameがあります。使い方は -nameと同じですが、-inameは大文字と小文字を区別しません。
find ./ -iname \*.go
main.go
main1.gO
main2.GO
上の例での検索対象は .go、.gO、.Go 、.GOを含むファイル・ディレクトリになります。
2. -type: 検索対象のタイプを指定できる
find *2* -type f
main2.go
main2.py
-typeの後ろにタイプを指定します。上の場合fはファイルを意味しており、ファイル名に「2」がつくものを検索します。よく使うファイルタイプには以下のようなものがあります。
d:ディレクトリ
l:シンボリックリンク
他にもbやsなどがあるので興味があったら調べてみてください。
3. -atime: ファイルにアクセスした日数を指定して検索する
find ./*.go -atime -2
./main2.go
./main.go
-atimeの後ろに任意の日数を入力します。「0」は今日、「1」は昨日、「2」は一昨日を表しています。日数を表す数字の前に「-」がついている場合、その日数以内を意味します。上の例の場合は「2日以内」にアクセスされたGoファイルを検索します。また数字に「+」がついている場合は、その日数より前を意味します。
find ./*.py -atime +2
./main2.py
./main3.py
この場合は、2日前以前にアクセスされたPythonファイルを検索します。
4. -mtime: ファイルの更新日数を指定して検索できる
find ./ -mtime -2
./
./.bash_history
./main2.go
./main.go
-mtimeの後ろに任意の日数を入力します。日数を表す数字については先の -atimeと同じです。
5. -empty: 空のファイルやディレクトリを検索できる
find ./ -empty
-emptyは中身が空のファイルやディレクトリを検索できます。
6. -size: ファイルやディレクトリのサイズを指定して検索できる
find ./ -size 1k
./main4.go
./main4.py
./main.py
-sizeの後ろに数字をつけて、ファイルやディレクトリのサイズを指定することができます。数字の後ろについているkは単位のKB(キロバイト)を意味しています。k以外にもM(メガバイト)やG(ギガバイト)などもあります。
7. -perm: 権限を指定して検索できる
権限を指定する方法は、記号(u,g,o,r,w,x,s,t)を使用する方法と数字を使用する2つの方法があります。
いずれの方法でも、prefix(権限の前につける記号)で挙動が変わります。ここは重要なので例とともに解説します。
| prefix | 説明 |
|---|---|
| prefixなし | 指定した権限をもつファイル |
| - | 最低でも指定したすべての権限をもつファイル |
| / | 指定した権限のいずれかをもつファイル |
まず、664、622、600の権限をもつ3つのファイルを用意します。
-rw-rw-r-- 1 envader envader 0 Nov 1 07:00 file1
-rw--w--w- 1 envader envader 0 Nov 1 07:00 file2
-rw------- 1 envader envader 0 Nov 1 07:00 file3
何もつけずに権限を指定した場合は、指定された権限のファイルのみが出力されます。
find . -perm 600
./file3
権限の前に-をつけると、最低でもその権限をもつファイルすべてが出力されます。
find . -perm -620
./file2
./file1
つづいて、2644、4644の権限をもつ2つのファイルを用意します。
-rw-r-Sr-- 1 envader envader 0 Nov 1 07:20 file4
-rwSr--r-- 1 envader envader 0 Nov 1 07:20 file5
権限の前に/をつけると、指定した権限のいずれかをもつファイルすべてが出力されます。
find . -perm /6000
./file4
./file5
※ macOSでは/ではなく+を使用します。
まとめ
オプションには他にもいろいろありますので興味があったらぜひ調べてみてください。findコマンドはよく使うコマンドなので、日頃から使って覚えるようにしておきましょう。
問題を解くためには、十分な画面サイズのPC環境をご利用下さい。
