Help us understand the problem. What is going on with this article?

findコマンドの使い方【基本】

概要

いつもfindコマンドをなんとなくの理解で使っていたので、基本型からおさらいをした。

目次

  • ディレクトリ構造の確認
  • 基本形
  • オプション
  • ターミナルにエラーを表示させない方法

ディレクトリ構造の確認

ターミナル
$ tree
 ./
 ├ dir1/
 | ├ file1_1.txt
 | └ file1_2.txt
 ├ dir2/
 |  ├ file2_1.txt
 |  └ file2_2.txt
 ├ dir3/
 ├ file1.txt
 ├ file2.txt
 └ file3.txt

基本形

find 探索場所のパス

出力結果は探索場所にある全てのファイル & 全てのディレクトリ

ディレクトリがある場合、その中をさらに探索していく(再帰的探索)

ターミナル
$ find . 
.
./file2.txt
./file3.txt
./file1.txt
./dir2
./dir2/file2_2.txt
./dir2/file2_1.txt
./dir3
./dir1
./dir1/file1_2.txt
./dir1/file1_1.txt

オプション

nameオプション

find 探索場所のパス -name ファイルまたはディレクトリの名前

基本形のままだと全てのファイル名やディレクトリ名が出力されてしまう。
特定のファイルのみを出力したいときはnameオプションを使う。

ターミナル
$ find . -name file1_1.txt
./dir1/file1_1.txt

上の例ではファイル名をフルネームで指定したが、ファイル名の"一部"しか分からなかったり、条件に一致するもの全てを表示したい場合には以下のようなワイルドカードを使うことができる。

* 任意の0文字以上
? 任意の一文字

ターミナル
$ find . -name "file1_*.txt"
./dir1/file1_2.txt
./dir1/file1_1.txt

ワイルドカードを使う場合は'または"でファイル名を囲む必要がある。
囲まないと以下のようなエラーが出てしまう。

ターミナル
$ find . -name file1_*.txt
zsh: no matches found: file1_*.txt

typeオプション

typeオプションを指定することで、検索の対象をファイルのみorディレクトリのみに変更できる。

ファイルのみを対象にしたい場合

find 探索場所のパス -type f

ターミナル
$ find . -type f
./file2.txt
./file3.txt
./file1.txt
./dir2/file2_2.txt
./dir2/file2_1.txt
./dir1/file1_2.txt

ディレクトリのみを対象にしたい場合

find 探索場所のパス -type d

ターミナル
find . -type d 
.
./dir2
./dir3
./dir1

ターミナルにエラーを表示させない方法

探索場所をルートディレクトリなどにすると、 Permission deniedやOperation not permittedといったエラーが大量に出力される。

ターミナル
$ find / -name file1.txt
find: /usr/sbin/authserver: Permission denied
find: /.PKInstallSandboxManager-SystemSoftware: Permission denied
find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied
find: /Library/Application Support/Apple/AssetCache/Data: Permission denied
find: /Library/Application Support/ApplePushService: Permission denied
find: /Library/Application Support/com.apple.TCC: Operation not permitted
find: /Library/OSAnalytics/Preferences/Library: Permission denied
find: /Library/Caches/com.google.SoftwareUpdate.0: Permission denied
.
.
.

これだと正しい結果が埋もれてしまって探すのが大変なので、エラーを違うところにはき出させる。

ターミナル
$ find / -name file1.txt 2>/dev/null
/path/dir/file1.txt

エラーがターミナルに出力されず、条件に当てはまるファイルだけが表示されるため、結果が見やすくなる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした