Loose-Info.com

Last Update 2019/12/26


TOP - Unix系OS - FreeBSD - 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現在) コマンド実行時のディレクトリは検索結果のファイルの存在するディレクトリ -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)で指定したモードのセットされている全てのビットがファイルでもセット されている場合に真 -print 常に真 検索結果のファイルパスを標準出力に出力し、末尾に改行文字を付ける -print0 常に真 検索結果のファイルパスを標準出力に出力し、末尾にヌル文字を付ける -prune 常に真 指定したファイルがディレクトリの場合、そのディレクトリ以下には下りていかない -regex パターン1 ファイルパスが正規表現(パターン1)とマッチする場合に真 -samefile ファイルパス1 ファイルが(値1)のファイルと同じinodeを参照している場合に真 -size 値1 文字1 ファイルサイズが、(値1)ブロックであれば真 ブロックサイズはデフォルトで512バイト (文字1)が指定されている場合のブロックサイズは以下の通り c バイト b 512バイト(デフォルト) k キロバイト M メガバイト G ギガバイト -type 文字1 ファイルが(文字1)で指定したファイルタイプと同じ場合に真 ファイルタイプ(主なもの) d ディレクトリ f 通常ファイル l シンボリックリンク -user 名前1 ファイルのユーザー名が(名前1)であれば真

※ オプションなどは個人的に重要と考えられるものを記述しており、記載の無いものは、manページや関連書籍などを参照願います。
※ 実行例の記述は、不要と考えられる部分の削除などの修正を行ったものを掲載しています。
※ 実行例の実行環境はFreeBSD 9.1です。

例で使用するファイル情報
ファイルリスト
$ ls -l total 16 -rwxr-xr-x 1 testuser2 testgroup2 6 Jan 29 22:01 test.sh -rw-r--r-- 1 testuser2 testgroup1 15 Jan 29 22:02 test.txt -rw-r--r-- 1 testuser1 testgroup1 21 Dec 27 16:25 test2.txt -rw-r--r-- 1 testuser1 testgroup2 0 Jan 29 22:03 test3.txt lrwxr-xr-x 1 testuser1 testuser1 9 Jan 30 19:20 test4.txt -> test3.txt drwxr-xr-x 2 testuser2 testgroup2 512 Jan 29 22:08 testdir $ ls -l testdir total 4 -rw-r--r-- 1 testuser2 testgroup2 20 Jan 29 22:08 test.txt
詳細情報
フォーマット : %d %i %Sp %l %Su %Sg %r %z "%Sa" "%Sm" "%Sc" "%SB" %k %b %#Xf %N $ stat test.sh 75 189058 -rwxr-xr-x 1 testuser2 testgroup2 383912 6 "Jan 29 22:01:23 2014" "Jan 29 22:01:23 2014" "Jan 30 19:14:37 2014" "Jan 29 22:01:23 2014" 32768 8 0 test.sh $ stat test.txt 75 188941 -rw-r--r-- 1 testuser2 testgroup1 385088 15 "Jan 29 22:02:29 2014" "Jan 29 22:02:29 2014" "Jan 30 19:15:26 2014" "Jan 29 22:02:29 2014" 32768 8 0 test.txt $ stat test2.txt 75 189022 -rw-r--r-- 1 testuser1 testgroup1 383589 21 "Dec 27 16:53:27 2013" "Dec 27 16:25:47 2013" "Jan 30 19:15:48 2014" "Dec 27 16:25:47 2013" 32768 8 0 test2.txt $ stat test3.txt 75 188993 -rw-r--r-- 1 testuser1 testgroup2 0 0 "Jan 29 22:03:35 2014" "Jan 29 22:03:43 2014" "Jan 30 19:25:38 2014" "Jan 29 22:03:19 2014" 32768 0 0 test3.txt $ stat test4.txt 75 188930 lrwxr-xr-x 1 testuser1 testuser1 1953719668 9 "Jan 30 19:20:18 2014" "Jan 30 19:20:18 2014" "Jan 30 19:24:08 2014" "Jan 30 19:20:18 2014" 32768 0 0 test4.txt $ stat testdir 75 188904 drwxr-xr-x 2 testuser2 testgroup2 383917 512 "Jan 30 19:32:06 2014" "Jan 29 22:08:00 2014" "Jan 30 19:25:27 2014" "Jan 29 22:07:30 2014" 32768 8 0 testdir $ stat testdir/test.txt 75 189055 -rw-r--r-- 1 testuser2 testgroup2 385334 20 "Jan 29 22:08:00 2014" "Jan 29 22:08:00 2014" "Jan 30 19:26:40 2014" "Jan 29 22:08:00 2014" 32768 8 0 testdir/test.txt

(例) -amin
実行結果
$ find . -amin -60 ← 最終アクセス日時が現在時刻より60分未満のファイルを検索 . ./test4.txt ./testdir $ find . -amin +60 ← 最終アクセス日時が現在時刻から60分を超えるファイルを検索 ./test.txt ./test2.txt ./test.sh ./test3.txt ./testdir/test.txt $ date Thu Jan 30 19:53:36 JST 2014 ← 現在時刻

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

(例) -atime
実行結果
$ find . -atime -1 ← 最終アクセス日時が現在時刻より1日未満のファイルを検索 . ./test.txt ./test.sh ./test3.txt ./test4.txt ./testdir ./testdir/test.txt $ find . -atime +1 ← 最終アクセス日時が現在時刻より1日を超えるファイルを検索 ./test2.txt $ date Thu Jan 30 20:11:15 JST 2014 ← 現在時刻

(例) -delete
実行結果
$ ls -l total 0 -rw-r--r-- 1 devusr devusr 0 Jan 30 20:13 test1.txt -rw-r--r-- 1 devusr devusr 0 Jan 30 20:14 test2.txt -rw-r--r-- 1 devusr devusr 0 Jan 30 20:14 test3.txt $ find . -name "test1*" -delete ← ※位置に注意。検索結果の後に設置 $ ls -l total 0 -rw-r--r-- 1 devusr devusr 0 Jan 30 20:14 test2.txt -rw-r--r-- 1 devusr devusr 0 Jan 30 20:14 test3.txt

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

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

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

(例) -execdir {} +
実行結果
$ find . -name "test*" -execdir echo '{}' \; test.txt test2.txt test.sh test3.txt test4.txt testdir test.txt $ find . -name "test*" -execdir echo '{}' \+ test.txt test2.txt test.sh test3.txt test4.txt testdir test.txt

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

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

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

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

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

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

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

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

(例) -ls
実行結果
$ find . -name "test.txt" -ls 188941 8 -rw-r--r-- 1 testuser2 testgroup1 15 Jan 29 22:02 ./test.txt 189055 8 -rw-r--r-- 1 testuser2 testgroup2 20 Jan 29 22:08 ./testdir/test.txt

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

(例) -newer
実行結果
$ find . -newer test3.txt . ./test4.txt ./testdir ./testdir/test.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" ./test.txt ./test2.txt ./test3.txt ./test4.txt ./testdir/test.txt

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

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

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

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

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

(例) -samefile
実行結果
$ ln test2.txt test5.txt $ ls -il total 20 189058 -rwxr-xr-x 1 testuser2 testgroup2 6 Jan 29 22:01 test.sh 188941 -rw-r--r-- 1 testuser2 testgroup1 15 Jan 29 22:02 test.txt 189022 -rw-r--r-- 2 testuser1 testgroup1 21 Dec 27 16:25 test2.txt 188993 -rw-r--r-- 1 testuser1 testgroup2 0 Jan 29 22:03 test3.txt 188930 lrwxr-xr-x 1 testuser1 testuser1 9 Jan 30 19:20 test4.txt -> test3.txt 189022 -rw-r--r-- 2 testuser1 testgroup1 21 Dec 27 16:25 test5.txt 188904 drwxr-xr-x 2 testuser2 testgroup2 512 Jan 29 22:08 testdir $ find . -samefile test2.txt ./test2.txt ./test5.txt

(例) -size
実行結果
$ find . -size 1 ← 1ブロック(512バイト) . ./test.txt ./test2.txt ./test.sh ./test4.txt ./testdir ./testdir/test.txt $ find . -size 6c ← 1バイト ./test.sh

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

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