Last Update 2014/03/11
ファイルの検索を行います。
find オプション1 パス1 式1
オプション1(任意)
シンボリックリンクに関する処理方法の指定などのオプション
詳細はマニュアル等参照
パス1
検索の対象となるディレクトリへのパス
式1
検索の条件式
※値1は+を付けた際は値より大きい場合、-であれば値未満の場合、符号無しは一致の場合
-amin 値1
最終アクセス日時が(値1)分前であれば真
-anewer ファイルパス1
最終アクセス日時が(ファイルパス1)のファイルより新しければ真
-atime 値1
最終アクセス日時が(値1)日前であれば真
-delete
検索結果のファイルを消去
-empty
空ファイルの場合に真
-exec コマンド1 ;
(コマンド1)のコマンドを実行
戻り値が0であれば真
コマンドは検索結果のファイルを順次実行
コマンド実行時のディレクトリはfindを実行したディレクトリ
-exec コマンド1 {} +
(コマンド1)のコマンドを実行
戻り値が0であれば真
検索結果のファイルをコマンドラインに追加して一括で実行(長さにより分割)
コマンド実行時のディレクトリはfindを実行したディレクトリ
-execdir コマンド1 ;
-execdir コマンド1 {} +
(コマンド1)のコマンドを実行
戻り値が0であれば真
コマンドは検索結果のファイルを順次実行
※「+」が付く場合も実行時の結果が同じくなる現象がみられる(2014/01/26現在)
コマンド実行時のディレクトリは検索結果のファイルの存在するディレクトリ
-executable
実行可能ファイルか検索可能ディレクトリの場合に真
-gid 値1
ファイルのグループIDが(値1)であれば真
-group 名前1
ファイルのグループ名が(名前1)であれば真
-ilname パターン1
ファイルがシンボリックリンクでリンク先のパスが(パターン1)とマッチする場合に真
大文字小文字を区別しない
-iname パターン1
ファイル名が(パターン1)とマッチする場合に真
大文字小文字を区別しない
-inum 値1
ファイルのinode番号が(値1)であれば真
-iregex パターン1
ファイルパスが正規表現(パターン1)とマッチする場合に真
大文字小文字を区別しない
-links 値1
ファイルのリンク数が(値1)であれば真
-lname パターン1
ファイルがシンボリックリンクでリンク先のパスが(パターン1)とマッチする場合に真
-ls
常に真
ファイルの情報を標準出力に出力
-name パターン1
ファイル名が(パターン1)とマッチする場合に真
-newer ファイルパス1
更新日時が(ファイルパス1)のファイルより新しければ真
-ok コマンド1 ;
(コマンド1)のコマンドを実行
実行前に確認メッセージが出力される。「y」を入力すると指定コマンドを実行
確認メッセージで同意しない場合は偽を返す
コマンドは検索結果のファイルを順次実行
コマンド実行時のディレクトリはfindを実行したディレクトリ
※検索結果のファイルの存在するディレクトリでの実行は、okdirを使用
-path パターン1
ファイルパスが(パターン1)とマッチする場合に真
-perm 値1
(値1)で指定したモードビットとファイルのパーミッションが一致している場合に真
-perm - 値1
(値1)で指定したモードのセットされている全てのビットがファイルでもセット
されている場合に真
-perm / 値1
(値1)で指定したモードのセットされているいずれかのビットがファイルでもセット
されている場合に真
-print
常に真
検索結果のファイルパスを標準出力に出力し、末尾に改行文字を付ける
-print0
常に真
検索結果のファイルパスを標準出力に出力し、末尾にヌル文字を付ける
-prune
常に真
指定したファイルがディレクトリの場合、そのディレクトリ以下には下りていかない
-regex パターン1
ファイルパスが正規表現(パターン1)とマッチする場合に真
-samefile ファイルパス1
ファイルが(値1)のファイルと同じinodeを参照している場合に真
-size 値1 文字1
ファイルサイズが、(値1)ブロックであれば真
ブロックサイズはデフォルトで512バイト
(文字1)が指定されている場合のブロックサイズは以下の通り
c バイト
b 512バイト(デフォルト)
w ワード(2バイト)
k キロバイト
M メガバイト
G ギガバイト
-type 文字1
ファイルが(文字1)で指定したファイルタイプと同じ場合に真
ファイルタイプ(主なもの)
d ディレクトリ
f 通常ファイル
l シンボリックリンク
-user 名前1
ファイルのユーザー名が(名前1)であれば真
※ オプションなどは個人的に重要と考えられるものを記述しており、記載の無いものは、manページや関連書籍などを参照願います。
※ 実行例の記述は、不要と考えられる部分の削除などの修正を行ったものを掲載しています。
※ 実行例の実行環境はUbuntu 12.10です。
※ 実行例の記述は、不要と考えられる部分の削除などの修正を行ったものを掲載しています。
※ 実行例の実行環境はUbuntu 12.10です。
例で使用するファイル情報
ファイルリスト
$ ls -l
total 16
-rwxr-xr-x 1 testuser2 testgroup2 6 Nov 17 14:54 test.sh
-rw-r--r-- 1 testuser2 testgroup1 15 Jan 23 08:57 test.txt
-rw-r--r-- 1 testuser1 testgroup1 10 Nov 17 14:56 test2.txt
-rw-rw-rw- 1 testuser1 testgroup2 0 Jan 23 08:38 test3.txt
lrwxrwxrwx 1 testuser1 testuser1 9 Jan 23 08:51 test4.txt -> test3.txt
drwxr-xr-x 2 testuser2 testgroup2 4096 Jan 22 19:25 testdir
$ ls -l testdir
total 4
-rw-r--r-- 1 testuser2 testgroup2 5 Jan 22 19:25 test.txt
詳細情報
$ stat test.sh
File: `test.sh'
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 4589495 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1003/testuser2) Gid: ( 1005/testgroup2)
Access: 2013-11-17 14:54:15.213415844 +0900
Modify: 2013-11-17 14:54:15.213415844 +0900
Change: 2013-11-17 15:44:29.288369497 +0900
Birth: -
$ stat test.txt
File: `test.txt'
Size: 15 Blocks: 8 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 4592066 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1003/testuser2) Gid: ( 1004/testgroup1)
Access: 2014-01-23 08:57:14.016323740 +0900
Modify: 2014-01-23 08:57:14.016323740 +0900
Change: 2014-01-23 08:57:14.068325690 +0900
Birth: -
$ stat test2.txt
File: `test2.txt'
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 4589497 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1002/testuser1) Gid: ( 1004/testgroup1)
Access: 2013-11-17 14:56:17.126027271 +0900
Modify: 2013-11-17 14:56:17.126027271 +0900
Change: 2013-11-17 15:44:54.792499949 +0900
Birth: -
$ stat test3.txt
File: `test3.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc00h/64512d Inode: 4592063 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1002/testuser1) Gid: ( 1005/testgroup2)
Access: 2014-01-23 08:38:30.478753270 +0900
Modify: 2014-01-23 08:38:30.478753270 +0900
Change: 2014-01-23 09:05:00.690626816 +0900
Birth: -
$ stat test4.txt
File: `test4.txt' -> `test3.txt'
Size: 9 Blocks: 0 IO Block: 4096 symbolic link
Device: fc00h/64512d Inode: 4589496 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1002/testuser1) Gid: ( 1002/testuser1)
Access: 2014-01-23 08:51:08.658513911 +0900
Modify: 2014-01-23 08:51:06.314505886 +0900
Change: 2014-01-23 08:51:06.314505886 +0900
Birth: -
$ stat testdir
File: `testdir'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fc00h/64512d Inode: 4589486 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1003/testuser2) Gid: ( 1005/testgroup2)
Access: 2014-01-22 19:25:05.422682400 +0900
Modify: 2014-01-22 19:25:02.730679787 +0900
Change: 2014-01-22 19:25:02.730679787 +0900
Birth: -
$ stat testdir/test.txt
File: `testdir/test.txt'
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 4592061 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1003/testuser2) Gid: ( 1005/testgroup2)
Access: 2014-01-22 19:25:02.682680595 +0900
Modify: 2014-01-22 19:25:02.682680595 +0900
Change: 2014-01-22 19:25:54.950938984 +0900
Birth: -
実行結果
$ find . -amin -60 ← 最終アクセス日時が現在時刻より60分未満のファイルを検索
.
./test3.txt
./test.txt
./test4.txt
$ find . -amin +60 ← 最終アクセス日時が現在時刻から60分を超えるファイルを検索
./test.sh
./test2.txt
./testdir
./testdir/test.txt
$ date
Thu Jan 23 09:14:15 JST 2014 ← 現在時刻
実行結果
$ find . -anewer test3.txt
.
./test.txt
./test4.txt
実行結果
$ find . -atime -1 ← 最終アクセス日時が現在時刻より1日未満のファイルを検索
.
./test3.txt
./test.txt
./test4.txt
./testdir
./testdir/test.txt
$ find . -atime +1 ← 最終アクセス日時が現在時刻より1日を超えるファイルを検索
./test.sh
./test2.txt
$ date
Thu Jan 23 09:21:07 JST 2014 ← 現在時刻
実行結果
$ ls -l
total 0
-rw-r--r-- 1 ******* ******* 0 Jan 25 09:03 test1.txt
-rw-r--r-- 1 ******* ******* 0 Jan 25 09:03 test2.txt
-rw-r--r-- 1 ******* ******* 0 Jan 25 09:03 test3.txt
$ find . -name "test1*" -delete ← ※位置に注意。検索結果の後に設置
$ ls -l
total 0
-rw-r--r-- 1 ******* ******* 0 Jan 25 09:03 test2.txt
-rw-r--r-- 1 ******* ******* 0 Jan 25 09:03 test3.txt
実行結果
$ find . -empty
./test3.txt
実行結果
$ find . -name "test*" -exec echo '{}' \; ← {}はfindによって処理中のファイル名
./test3.txt
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir
./testdir/test.txt
実行結果
$ find . -name "test*" -exec echo '{}' \+ ← {}はfindによって処理中のファイル名
./test3.txt ./test.sh ./test2.txt ./test.txt ./test4.txt ./testdir ./testdir/test.txt
実行結果
$ find . -name "test*" -execdir echo '{}' \;
./test3.txt
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir
./test.txt
$ find . -name "test*" -execdir echo '{}' \+ ← 「+」を付けても同じ結果
./test3.txt
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir
./test.txt
実行結果
$ find . -executable
.
./test.sh
./testdir
実行結果
$ find . -gid 1004
./test2.txt
./test.txt
実行結果
$ find . -group testgroup1
./test2.txt
./test.txt
実行結果
$ find . -ilname "Test*"
./test4.txt
実行結果
$ find . -iname "Test*"
./test3.txt
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir
./testdir/test.txt
実行結果
$ find . -inum 4589497
./test2.txt
実行結果
$ find . -iregex "\S*Test\w+\Wtxt"
./test3.txt
./test2.txt
./test4.txt
実行結果
$ find . -links 2
./testdir
実行結果
$ find . -lname "test*"
./test4.txt
実行結果
$ find . -name "test.txt" -ls
4592066 4 -rw-r--r-- 1 testuser2 testgroup1 15 Jan 23 08:57 ./test.txt
4592061 4 -rw-r--r-- 1 testuser2 testgroup2 5 Jan 22 19:25 ./testdir/test.txt
実行結果
$ find . -name "test*"
./test3.txt
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir
./testdir/test.txt
実行結果
$ find . -newer test3.txt
.
./test.txt
./test4.txt
実行結果
$ find . -name "test.txt" -ok echo '{}' \;
< echo ... ./test.txt > ? y ← 確認メッセージde「y」を入力
./test.txt
< echo ... ./testdir/test.txt > ? y
./testdir/test.txt
実行結果
$ find . -path "*test*.txt"
./test3.txt
./test2.txt
./test.txt
./test4.txt
./testdir/test.txt
実行結果
$ find . -perm 644
./test2.txt
./test.txt
./testdir/test.txt
実行結果
$ find . -perm -755
.
./test.sh
./test4.txt
./testdir
実行結果
$ find . -perm /100
.
./test.sh
./test4.txt
./testdir
実行結果
$ find . -name "test*.txt" -print
./test3.txt
./test2.txt
./test.txt
./test4.txt
./testdir/test.txt
実行結果
$ find . -name "test*.txt" -print0
./test3.txt./test2.txt./test.txt./test4.txt./testdir/test.txt
実行結果
$ find . -name "testdir" -prune -o -print ← testdirという名前のファイルやディレクトリを除外
.
./test3.txt
./test.sh
./test2.txt
./test.txt
./test4.txt
実行結果
$ sudo ln test2.txt test5.txt
[sudo] password for *******:
$ ls -il
total 20
4589495 -rwxr-xr-x 1 testuser2 testgroup2 6 Nov 17 14:54 test.sh
4592066 -rw-r--r-- 1 testuser2 testgroup1 15 Jan 23 08:57 test.txt
4589497 -rw-r--r-- 2 testuser1 testgroup1 10 Nov 17 14:56 test2.txt
4592063 -rw-rw-rw- 1 testuser1 testgroup2 0 Jan 23 08:38 test3.txt
4589496 lrwxrwxrwx 1 testuser1 testuser1 9 Jan 23 08:51 test4.txt -> test3.txt
4589497 -rw-r--r-- 2 testuser1 testgroup1 10 Nov 17 14:56 test5.txt ← ハードリンク
4589486 drwxr-xr-x 2 testuser2 testgroup2 4096 Jan 22 19:25 testdir
$ find . -samefile test2.txt
./test5.txt
./test2.txt
実行結果
$ find . -size 1 ← 1ブロック(512バイト)
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir/test.txt
$ find . -size 8 ← 8ブロック(4096バイト)
.
./testdir
$ find . -size 1k ← 1キロバイト(1024バイト)
./test.sh
./test2.txt
./test.txt
./test4.txt
./testdir/test.txt
実行結果
$ find -type f ← 通常ファイル
./test3.txt
./test.sh
./test2.txt
./test.txt
./testdir/test.txt
$ find -type l ← シンボリックリンク
./test4.txt
実行結果
$ find . -user testuser1
./test3.txt
./test2.txt
./test4.txt