Loose-Info.com

Last Update 2019/12/26


TOP - Unix系OS - Linux - find(1)

ファイルの検索を行います。

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です。

例で使用するファイル情報
ファイルリスト
$ 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: -

(例) -amin
実行結果
$ 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 ← 現在時刻

(例) -anewer
実行結果
$ find . -anewer test3.txt . ./test.txt ./test4.txt

(例) -atime
実行結果
$ 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 ← 現在時刻

(例) -delete
実行結果
$ 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

(例) -empty
実行結果
$ find . -empty ./test3.txt

(例) -exec ;
実行結果
$ find . -name "test*" -exec echo '{}' \; ← {}はfindによって処理中のファイル名 ./test3.txt ./test.sh ./test2.txt ./test.txt ./test4.txt ./testdir ./testdir/test.txt

(例) -exec {} +
実行結果
$ find . -name "test*" -exec echo '{}' \+ ← {}はfindによって処理中のファイル名 ./test3.txt ./test.sh ./test2.txt ./test.txt ./test4.txt ./testdir ./testdir/test.txt

(例) -execdir {} +
実行結果
$ 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

(例) -executable
実行結果
$ find . -executable . ./test.sh ./testdir

(例) -gid
実行結果
$ find . -gid 1004 ./test2.txt ./test.txt

(例) -group
実行結果
$ find . -group testgroup1 ./test2.txt ./test.txt

(例) -ilname
実行結果
$ find . -ilname "Test*" ./test4.txt

(例) -iname
実行結果
$ find . -iname "Test*" ./test3.txt ./test.sh ./test2.txt ./test.txt ./test4.txt ./testdir ./testdir/test.txt

(例) -inum
実行結果
$ find . -inum 4589497 ./test2.txt

(例) -iregex
実行結果
$ find . -iregex "\S*Test\w+\Wtxt" ./test3.txt ./test2.txt ./test4.txt

(例) -links
実行結果
$ find . -links 2 ./testdir

(例) -lname
実行結果
$ find . -lname "test*" ./test4.txt

(例) -ls
実行結果
$ 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

(例) -name
実行結果
$ find . -name "test*" ./test3.txt ./test.sh ./test2.txt ./test.txt ./test4.txt ./testdir ./testdir/test.txt

(例) -newer
実行結果
$ find . -newer test3.txt . ./test.txt ./test4.txt

(例) -ok ;
実行結果
$ find . -name "test.txt" -ok echo '{}' \; < echo ... ./test.txt > ? y ← 確認メッセージde「y」を入力 ./test.txt < echo ... ./testdir/test.txt > ? y ./testdir/test.txt

(例) -path
実行結果
$ find . -path "*test*.txt" ./test3.txt ./test2.txt ./test.txt ./test4.txt ./testdir/test.txt

(例) -perm
実行結果
$ find . -perm 644 ./test2.txt ./test.txt ./testdir/test.txt

(例) -perm -
実行結果
$ find . -perm -755 . ./test.sh ./test4.txt ./testdir

(例) -perm /
実行結果
$ find . -perm /100 . ./test.sh ./test4.txt ./testdir

(例) -print
実行結果
$ find . -name "test*.txt" -print ./test3.txt ./test2.txt ./test.txt ./test4.txt ./testdir/test.txt

(例) -print0
実行結果
$ find . -name "test*.txt" -print0 ./test3.txt./test2.txt./test.txt./test4.txt./testdir/test.txt

(例) -prune
実行結果
$ find . -name "testdir" -prune -o -print ← testdirという名前のファイルやディレクトリを除外 . ./test3.txt ./test.sh ./test2.txt ./test.txt ./test4.txt

(例) -samefile
実行結果
$ 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

(例) -size
実行結果
$ 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

(例) -type
実行結果
$ find -type f ← 通常ファイル ./test3.txt ./test.sh ./test2.txt ./test.txt ./testdir/test.txt $ find -type l ← シンボリックリンク ./test4.txt

(例) -user
実行結果
$ find . -user testuser1 ./test3.txt ./test2.txt ./test4.txt