(Linuxコマンド)findの使い方について


この記事の内容

  • Linux環境におけるfindコマンドについて

実行環境

オンライン学習サービスEnvaderを使いました。
Envaderは、環境構築が不要で簡単にLinux環境が学べるので学習するのにとても便利でした。コースは、

  • Linux基礎
  • Linux応用
  • セキュリティー基礎 などなど

無料で使えて、初心者には難易度の高い環境構築しなくていいのでおすすめです。(一部有料)

Envaderコース一覧

findコマンドとは?

 findコマンドとは、ファイルやディレクトリなどを検索し見つけ出すためのコマンドです。オプションもたくさんあるので少しずつでもいいので覚えていきましょう!

基本的な使い方

$ find 検索場所 [オプション] 検索ファイル名

これだけだと少しわかりずらいと思うので、実際に入力したしたコマンドを見ていきましょう。

envader@172-19-4-2:~$ find *.go
main.go
main2.go
main3.go
main4.go

 上のコマンドは、すべての場所(*)から.goという拡張子をもったファイル、ディレクトリを検索するとしたものです。*は、ワイルドカードと呼ばれる*の前に書かれた文字は、どれでも対象にしますよという特殊な文字です。これが基本的なfindの使い方です。次は、オプションについて見てみましょう。

よく使うオプション

オプション 説明
-name ファイル名やディレクトリ名を指定して検索します。大文字と小文字を区別します。大文字と小文字を区別しないものに-inameがあります。
-type ファイル、ディレクトリ、シンボリックリンクなどタイプを指定できます
-atime ファイルにアクセスした時間を指定して検索ができます
-mtime ファイルを更新した時間を指定して検索ができます
-empty 空のファイルやディレクトリを検索します
-size ファイルやディレクトリのサイズを指定できます

参考資料:https://envader.plus/course/1/scenario/1016 

大文字と小文字を区別して検索する-name

$ find ./ -name \*.go
main.go
main1.go
# main2.GO 表示されない
# main2.Go 表示されない

  -nameは、大文字と小文字を区別して検索を行います。そのため、上記の入力では、.goのみ表示され、.GOは表示されません。また、-nameは、特殊文字を使う場合は、/を使う必要があります。 -nameに似たコマンドで、 -inameがあります。これは、 -nameとは逆で、大文字と小文字を区別しないで表示します。

$ find ./ -iname \*.go
main.go
main1.gO
main2.GO

ファイル、ディレクトリのタイプを指定できる -type

$ find *2* -type f
main2.go
main2.py

-typeの後ろに指定するタイプを書きます。
-fは、ファイル、-dは、ディレクトリ、-lは、シンボリックリンクです。

ファイルにアクセスした時間を指定する-atime

$ find ./*.go -atime -2
./main2.go
./main.go

-atimeの後にある-2は一昨日を表しています。
 今日であったら、0、昨日であったら1と書くことで時間を指定できます。
もし、数字の前に-がついていた場合は、その日数以内を意味します。なので、今回の上の実行では、2日以内にアクセスされた拡張子が.goと記されたファイルを検索します。

 また、下のように数字の前+がついていた場合は、その日数よりも前にアクセスしていた場合を指します。
この場合は、2日より前にアクセスされた.pyファイルを検索します。

$ find ./*.py -atime +2
./main2.py
./main3.py

空のファイルやディレクトリを検索できる-empty

find ./ -empty

-emptyでは、中身がからのファイルやディレクトリを検索できます。

ファイルやディレクトリのサイズを指定しできる-size

find ./ -size 1k
./main4.go
./main4.py
./main.py

 -sizeは、ファイルやディレクトリのサイズを指定できます。
上の場合の1kは、1キロバイト(KB)を指しています。他にも、メガバイト(M)やギガバイト(G)などがあります。

まとめ

 今回は、ファイルやディレクトリを探索し見つけ出すfindコマンドについて学びました。findコマンドには、たくさんのオプションがあり、1度に覚えるのは大変だと思います。わからないときは、その都度調べ、徐々に身に着けられるようにしていきましょう!

参考資料

【Linuxコマンド】findの使い方について:https://envader.plus/course/1/scenario/1016