ファイルを探す

記事の内容

概要

findコマンドは、ファイルシステム内でファイルやディレクトリを検索するための非常に強力なツールです。

find
ディレクトリ階層

home
└─ dir
  ├─ sample1.txt
  ├─ sample2.txt
  ├─ sample3.txt
  └─ sample1.log

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls dir/
sample1.txt sample2.txt sample3.txt sample1.log

[tomoji@10moji-blog.com home]$ find dir/ -name "*.txt"
dir/sample1.txt
dir/sample2.txt
dir/sample3.txt

[tomoji@10moji-blog.com home]$ find dir/ -name "*.log"
dir/sample1.log

オプション一覧

オプション説明
-nameファイル名が指定したパターンに一致するもの
-iname大文字小文字を区別せずにファイル名を検索
-type指定されたファイルの種類を検索
-sizeファイルのサイズに基づいて検索
-maxdepth検索の階層の深さを制限
-mindepth検索の最小階層を指定
-prune特定のディレクトリを検索から除外
-exec検索結果に対して指定したコマンドを実行
-printファイル名を標準出力に出力
-mtime最終修正日時がn日前以降に更新されたものを検索
-ctime最終変更日時がn日前以降に更新されたものを検索
-atime最終アクセス日時がn日前以降に更新されたものを検索
-permパーミッションが指定されたモードと一致するファイルを検索
-user指定された所有者のファイルを検索
-group指定されたグループのファイルを検索

-name

-nameオプションは、ファイル名が指定したパターンに一致するものを検索します。

find -name
ディレクトリ階層

home
└─ dir
  ├─ sample1.txt
  ├─ sample2.txt
  ├─ sample3.txt
  └─ sample1.log

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls dir/
sample1.txt sample2.txt sample3.txt sample1.log

[tomoji@10moji-blog.com home]$ find dir/ -name "*.txt"
dir/sample1.txt
dir/sample2.txt
dir/sample3.txt

[tomoji@10moji-blog.com home]$ find dir/ -name "*.log"
dir/sample1.log

-iname

-inameオプションは、大文字小文字を区別せずにファイル名を検索します。

find -iname
ディレクトリ階層

home
└─ dir
  ├─ sample1.txt
  ├─ sample2.txt
  ├─ sample3.txt
  └─ SAMPLE4.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls dir/
sample1.txt sample2.txt sample3.txt SAMPLE4.txt sample1.log

[tomoji@10moji-blog.com home]$ find dir/ -iname "sample*.txt"
dir/sample1.txt
dir/sample2.txt
dir/sample3.txt

[tomoji@10moji-blog.com home]$ find dir/ -iname "sample*.txt"
dir/sample1.txt
dir/sample2.txt
dir/sample3.txt
dir/SAMPLE4.txt

-type

-typeオプションは、指定されたファイルの種類を検索します。

f : 通常ファイル
d : ディレクトリ
l : シンボリックリンク

find -type
ディレクトリ階層

home
└─ dir
  ├─ sample1.txt
  ├─ sample2.txt
  └─ ln_sample.txt -> sample1.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find dir/ -type f
dir/sample1.txt
dir/sample2.txt

[tomoji@10moji-blog.com home]$ find dir/ -type d
dir/

[tomoji@10moji-blog.com home]$ find dir/ -type l
dir/ln_sample.txt

-size

-sizeオプションは、ファイルのサイズに基づいて検索します。
+または-を前につけて、サイズを上回るまたはサイズを下回るものを指定できます。

c : バイト単位での指定
k : キロバイト単位での指定
M : メガバイト単位での指定
G : ギガバイト単位での指定

find -size
ディレクトリ階層

home
└─ dir
  ├─ sample1.txt
  └─ sample1.jpeg

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com dir]$ ls -l
-rw-r--r--  1 tomoji  tomoji 10B 1 1 12:34 sample1.txt
-rw-r--r--  1 tomoji  tomoji  5M 1 1 12:34 sample1.png

[tomoji@10moji-blog.com home]$ find dir/ -size +3M
dir/sample1.png

[tomoji@10moji-blog.com home]$ find dir/ -size -3M
dir/sample1.txt

-maxdepth / -mindepth

-maxdepthオプションや-mindepthオプションは、検索の階層に関して指定します。

maxdepth : 検索の階層の深さを制限
mindepth : 検索の最小階層を指定

find -maxdepth / -mindepth
ディレクトリ階層

home
└─ dir1
  ├─ sample1.txt
  └─ dir2
    ├─ sample2.txt
    └─ dir3
      └─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find dir1 -name sample*
dir1/sample1.txt
dir1/dir2/sample2.txt
dir1/dir2/dir3/sample3.txt

[tomoji@10moji-blog.com home]$ find dir1 -maxdepth 1 -name sample*
dir1/sample1.txt

[tomoji@10moji-blog.com home]$ find dir1 -maxdepth 2 -name sample*
dir1/sample1.txt
dir1/dir2/sample2.txt

[tomoji@10moji-blog.com home]$ find dir1 -maxdepth 3 -name sample*
dir1/sample1.txt
dir1/dir2/sample2.txt
dir1/dir2/dir3/sample3.txt

[tomoji@10moji-blog.com home]$ find dir1 -mindepth 1 -name sample*
dir1/sample1.txt
dir1/dir2/sample2.txt
dir1/dir2/dir3/sample3.txt

[tomoji@10moji-blog.com home]$ find dir1 -mindepth 2 -name sample*
dir1/dir2/sample2.txt
dir1/dir2/dir3/sample3.txt

[tomoji@10moji-blog.com home]$ find dir1 -mindepth 3 -name sample*
dir1/dir2/dir3/sample3.txt

-prune

-pruneオプションは、特定のディレクトリを検索から除外します。

find -prune
ディレクトリ階層

home
└─ dir1
│ └─ sample.txt
└─ dir2
  └─ sample.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find .
.
./dir1
./dir1/sample.txt
./dir2
./dir2/sample.txt

[tomoji@10moji-blog.com home]$ find . -name dir1 -prune -o -print
.
./dir2
./dir2/sample.txt

-exec

-execオプションは、見つかったファイルやディレクトリに対してコマンドを実行するためのオプションです。

find -exec
ディレクトリ階層

home
└─ dir1
│ └─ sample1.txt
└─ dir2
  └─ sample2.txt
===============
【sample1.txtに中身】
このテキストはサンプルテキスト1になります。
【sample2.txtに中身】
このテキストはサンプルテキスト2になります。

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -exec ls -l {} \;
-rw-r--r--  1 tomoji  tomoji  0  1  2 00:02 dir2/sample2.txt
-rw-r--r--  1 tomoji  tomoji  0  1  2 00:01 dir1/sample1.txt

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -exec cat {} \;
このテキストはサンプルテキスト2になります。
このテキストはサンプルテキスト1になります。

-print

-printオプションは、見つかったファイルやディレクトリのパスを標準出力するためのオプションです。

find -print
ディレクトリ階層

home
└─ dir1
│ └─ sample1.txt
└─ dir2
  └─ sample2.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -print
./dir2/sample2.txt
./dir1/sample1.txt

-mtime

-mtimeオプションは、ファイルの最終修正日時(最終更新日時)を基準に検索するためのオプションです。

+n : 最終修正日時がn日前よりも古いファイルを検索
-n : 最終修正日時がn日以内のファイルを検索

find -mtime
ディレクトリ階層

home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ date
2020年 1月10日 水曜日 00時01分00秒 JST

[tomoji@10moji-blog.com home]$ ls -l
-rw-r--r--  1 tomoji  tomoji  0  1  9 00:01 sample2.txt
-rw-r--r--  1 tomoji  tomoji  0  1  2 00:01 sample1.txt

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -mtime +3
./sample1.txt

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -mtime -3
./sample2.txt

-ctime

-ctimeオプションは、ファイルの最終変更日時(最終属性変更日時)を基準に検索するためのオプションです。
※パーミッションや所有者などの変更

find -ctime
ディレクトリ階層

home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -ctime -3
./sample3.txt

-atime

-atimeオプションは、ファイルの最終アクセス日時(最終アクセス時刻)を基準に検索するためのオプションです。

+n : 最終アクセス日時がn日前よりも古いファイルを検索
-n : 最終アクセス日時がn日以内のファイルを検索

find -atime
ディレクトリ階層

home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -atime -1

[tomoji@10moji-blog.com home]$ cat sample2.txt
このテキストはサンプルテキスト2になります。

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -atime -1
./sample2.txt

-perm

-permオプションは、ファイルのパーミッション(アクセス権)を基準に検索するためのオプションです。

mode : パーミッションが指定されたモードと完全に一致するファイルを検索
-mode : 指定されたモードの権限をすべて持っているファイルを検索
/mode : 指定されたモードの権限のうち、どれか一つ以上を持っているファイルを検索

find -perm
ディレクトリ階層

home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls -l
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample3.txt
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample2.txt
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample1.txt

[tomoji@10moji-blog.com home]$ chmod 777 sample2.txt

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -perm 777
./sample2.txt

-user

-userオプションは、ユーザーが所有するファイルを検索するために使用されます。

find -user
ディレクトリ階層

home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls -l
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample3.txt
-rw-r--r--  1   root    root  0  1  1 00:02 sample2.txt
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample1.txt

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -user tomoji
./sample1.txt
./sample3.txt

-group

-groupオプションは、特定のグループに属するファイルを検索するために使用されます。

find -group
ディレクトリ階層

home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls -l
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample3.txt
-rw-r--r--  1   root    root  0  1  1 00:02 sample2.txt
-rw-r--r--  1 tomoji  tomoji  0  1  1 00:01 sample1.txt

[tomoji@10moji-blog.com home]$ find . -name "*.txt" -group root
./sample2.txt
記事の内容
閉じる