概要
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 | 検索結果に対して指定したコマンドを実行 |
ファイル名を標準出力に出力 | |
-mtime | 最終修正日時がn日前以降に更新されたものを検索 |
-ctime | 最終変更日時がn日前以降に更新されたものを検索 |
-atime | 最終アクセス日時がn日前以降に更新されたものを検索 |
-perm | パーミッションが指定されたモードと一致するファイルを検索 |
-user | 指定された所有者のファイルを検索 |
-group | 指定されたグループのファイルを検索 |
-name
-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オプションは、大文字小文字を区別せずにファイル名を検索します。
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オプションは、指定されたファイルの種類を検索します。
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オプションは、ファイルのサイズに基づいて検索します。+
または-
を前につけて、サイズを上回るまたはサイズを下回るものを指定できます。
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オプションは、検索の階層に関して指定します。
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オプションは、特定のディレクトリを検索から除外します。
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オプションは、見つかったファイルやディレクトリに対してコマンドを実行するためのオプションです。
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オプションは、見つかったファイルやディレクトリのパスを標準出力するためのオプションです。
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オプションは、ファイルの最終修正日時(最終更新日時)を基準に検索するためのオプションです。
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オプションは、ファイルの最終変更日時(最終属性変更日時)を基準に検索するためのオプションです。
※パーミッションや所有者などの変更
home
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt
【homeディレクトリにいる場合】
[tomoji@10moji-blog.com home]$ find . -name "*.txt" -ctime -3
./sample3.txt
-atime
-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オプションは、ファイルのパーミッション(アクセス権)を基準に検索するためのオプションです。
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オプションは、ユーザーが所有するファイルを検索するために使用されます。
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オプションは、特定のグループに属するファイルを検索するために使用されます。
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