[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
デフォルトで,find
は標準出力に,与えられた基準に一致するファイル
の名前を出力します.一致したファイルに関する詳細を取得する方法は,
See section 3. アクション.
2.1 名前 | ||
2.2 リンク | ||
2.3 時間 | ||
2.4 サイズ | ||
2.5 形式 | ||
2.6 所有者 | ||
2.7 許可 | ||
2.8 内容 | ||
2.9 ディレクトリ | ||
2.10 ファイルシステム | ||
2.11 オペレーターの主なものを組み合わせる |
基準パターンに一致する名前をもつファイルを検索する方法下記のようになりま す.これらのテストでのpattern引数の記述については,See section 2.1.4 シェルパターンマッチング.
これらのテストには,`i'で始まる名前を持つ,大文字小文字を区別バージョ ンと区別しないバージョンがあります.大文字小文字を区別しない比較では,パ ターン`fo*'と`F??'は,ファイル名`Foo',`FOO', `foo',`fOo'等に一致します.
2.1.1 ベース名のパターン | ||
2.1.2 完全なファイル名のパターン | ||
2.1.3 すばやい完全な名前の検索 | ||
2.1.4 シェルパターンマッチング | Wildcards used by these programs. |
find /usr/local/doc -name '*.texi' |
実際にディスク上のディレクトリをスキャンすることなく(きっと遅いでしょう),
ファイルを名前で検索するために,locate
プログラムを使用することが
可能です.与えたそれぞれのシェルパターンに対し,locate
は,一つま
たはそれ以上のファイル名のデータベースを検索し,パターンを含むファイル名
を表示します.シェルパターンの詳細は,See section 2.1.4 シェルパターンマッチング.
パターンが---メタ文字を含まない---平文の場合,locate
は,文字列を
含む全てのファイル名を表示します.パターンがメタ文字を含む場合,
locate
はパターンに正確に一致しているファイル名のみ表示します.結
果として,メタ文字を含むパターンは,通常`*'で開始すべきで,同じもの
で終わることが最も多くなっています.例外は,ファイル名の最初または最後へ
の,明示的な一致を試みるパターンです.
以下のコマンドは,
locate pattern |
こちらとほとんど等価です.
find directories -name pattern |
ここでのdirectoriesは,情報を含むファイル名データベースのディレク
トリです.違いはlocate
情報が古い可能性があり,そして,
locate
はfind
とわずかに異なるパターンでワイルドカードを扱う
ことです(see section 2.1.4 シェルパターンマッチング) .
ファイル名データベースは,データベースが最後に更新されたときにシステムに 存在したファイルのリストを含みます.システム管理者はデフォルトのデータベー スのファイル名,データベースを更新する頻度,そして,エントリーを含むディ レクトリを選択することが可能です.
ここに,locate
が検索するファイル名データベースを選択する方法があ
ります.デフォルトはシステムに依存します.
--database=path
-d path
LOCATE_PATH
を使用することも可能です.両方使用されてい
る場合,オプションは環境変数に優先します.
find
とlocate
は,ファイル名やファイル名の一部を,シェルパター
ンと比較することが可能です.シェルパターンは,以下の特殊文字を含む
可能性がある文字列で,それはワイルドカードやメタ文字をして知
られています.
メタ文字を含むパターンを,シェルがそれ自身を展開することから避けるため引 用符で囲む必要があります.二重引用符とシングル引用符の両方が動作します. そのため,(それ自身は)バックスラッシュでエスケープします.
*
?
[string]
\
find
がシェルのパターンマッチ(`-name',`-path'等)で行な
うテストでは,パターンの中のワイルドカードはファイル名の最初の`.'に
一致しません.これはlocate
ではそうなりません.このため,
`find -name '*macs''は`.emacs'に一致しませんが,`locate
'*macs''では一致します.
スラッシュ文字は,find
とlocate
が行なうシェルのパターンマッ
チで特殊な意味はなく,ワイルドカードがそれに一致しないシェルとは異なりま
す.そのため,パターン`foo*bar'はファイル名`foo3/bar'に一致し,
パターン`./sr*sc'はファイル名`./src/misc'に一致するはずです.
ファイルをお互いにリンクすること可能にする2つの方法があります.シ ンボリックリンク(symbolic link)は,他のファイルの名前の部分が内容になる, ファイルの特殊な形式です.ハードリンク(hard link)は,一つのファイ ルに対する,複数のディレクトリエントリですファイル名のすべては同じインデッ クスノード(inode)番号をディスク上に持ちます.
2.2.1 シンボリックリンク | ||
2.2.2 ハードリンク |
find . -lname '*sysdep.c' |
find
は,ディレクトリツリーを検索する時,ディレクトリへのシンボリッ
クリンクをたどります.
ハードリンクを探すため,最初に見つけたいファイルにリンクしているファイル のinodeナンバーを取得します.`ls -i'や`find -ls'を実行すること で,ファイルのinodeナンバーとそれへのリンクの数を知ることが可能です.ファ イルに1つ以上のリンクがある場合,そのinodeナンバーを`-inum'に渡すこ とで,他のリンクを検索することが可能です.多くのシステムの`/usr'の ように,他のファイルシステムをマウントしているディレクトリを起点に検索を 開始している場合は,`-xdev'オプションを加えて下さい.ファイルへのハー ドリンクは同じファイルシステムに存在する必要があるので,これを行なうこと で不要な検索を防ぎます.See section 2.10 ファイルシステム.
`-links'を用いると,特定の数のリンクを持つファイルを検索することも 可能です.ディレクトリは通常,少なくとも2つのハードリンクがあります.そ れらの`.'エントリは2番目のものです.サブディレクトリがある場合,そ れは個別に親ディレクトリを示す`..'と呼ばれるハードリンクもあります.
それぞれのファイルには3つのタイムスタンプがあり,それらはファイルに対し て特定な処理を実行した,最後の時間を記録します.
タイムスタンプが特定の範囲にあるファイルを検索したり,他のタイムスタンプ と比較したりすることが可能です.
2.3.1 期間の範囲 | ||
2.3.2 タイムスタンプの比較 |
これらのテストは,範囲(`+n'と`-n')を用いる場合に, 主に役立ちます.
find /u/bill -amin +2 -amin -6 |
find ~ -daystart -type f -mtime 1 |
タイムスタンプを現在の時間と比較する代わりに,それを他のファイルのタイム
スタンプと比較することが可能です.そのファイルのタイムスタンプは,いくつ
かのイベントによって,他のプログラムによって更新されるかもしれません.ま
た,touch
コマンドを使用して,特定の固定した日付に設定することもで
きるでしょう.例えば,今年の1月1日移行に編集された`/usr'内のファイ
ルをリストアップするために,以下のようにします.
touch -t 02010000 /tmp/stamp$$ find /usr -newer /tmp/stamp$$ rm -f /tmp/stamp$$ |
find . -newer /bin/sh |
b
c
k
w
サイズは間接的なブロックを数えませんが,実際には割り当てられていない疎ら なファイル内のブロックは数えます.
b
c
d
p
f
l
s
chown
やchgrp
プログラムを使用して,既存の
ユーザとグループに変更したほうが良いでしょう.
ファイルの許可の構造とそれを指定する方法に関する情報は,See section 6. ファイルの許可.
ファイルの内容を基に検索するために,grep
プログラムを使用すること
が可能です.例えば,現在のディレクトリで,文字列`thing'を含むCのソー
スファイルを見つけるためには,以下のようにすることで可能となります.
grep -l thing *.[ch] |
サブディレクトリのファイルの文字列を検索したい時も,以下のように
find
とxargs
を用いて,grep
を組み合わせることが可能で
す.
find . -name '*.[ch]' | xargs grep -l thing |
grep
は`-l'オプションで,文字列を含む行ではなくそれを含むファ
イル名のみ出力します.文字列の引数(`thing')は,実際には正規表現で,
そのためメタ文字を含みます.この方法で,find
の出力がない場合は
xargs
にgrep
を実行させないように,`-r'オプションを使用
したり,名前にスペースを含んでいて間違って解釈することを防ぐために,
find
のアクション`-print0'とxargs
のオプション`-0'
を使用することで改善が可能です.
find . -name '*.[ch]' -print0 | xargs -r -0 grep -l thing |
パターンに一致する内容があるファイルを見つけるためのより完全な扱いは,
grep
のマニュアルページを参照して下さい.
ディレクトリでのfind
の検索を制御し,それらを検索する方法がここに
あります.これらの2つのオプションで,ディレクトリツリーを輪切りにする処
理が可能となります.
cpio
やtar
でファイルのリストを生成する時,これを行なうのは
良い考えです.ディレクトリにその所有者に対する書き込み許可がない場合,ディ
レクトリの許可はその内容のあとで復元されるため,その内容はアーカイブから
復元することが可能です.
例えば,ディレクトリ`src/emacs'と,そのすべてのファイルと,それ以下 のディレクトリを省略し,それ以外で見つかったファイルの名前を出力するため に以下のようにします.
find . -path './src/emacs' -prune -o -print |
find
がディレクトリを調査している時,
ディレクトリのリンク数よりサブディレクトリが2つ少ないことがはっきりした
後で,それはディレクトリのエントリの残りがディレクトリでない(ディレクト
リ内のleafツリー)ことが分かります.ファイルの名前のみ調査に必要な
場合は,それらをはっきりさせる必要はありません.これで検索スピードが飛躍
的に増加します.
ファイルシステムとはディスクの区分のことで,それはローカルホスト,
または,ネットワーク経由のリモートホストからマウントされたもののいずれか
になります.ネットワークファイルシステムを検索すると遅くなるはずなので,
通常はfind
がそうすることを避けます.
特定のファイルシステムの検索を避ける2つの方法があります.一つの方法は,
find
に1つのファイルシステムのみを検索するよう伝えることです.
もう一つの方法は,それぞれのファイルがあるファイルシステムの形式を調査し, 好ましくないファイルシステムの形式にあるディレクトリに下らないようにしま す.
ufs 4.2 4.3 nfs tmp mfs S51K S52K |
オペレータはテストとアクションから,複雑な表現を構築します.オペレータは 優先順位が下がる順序で,以下のものがあります.
( expr )
! expr
-not expr
expr1 expr2
expr1 -a expr2
expr1 -and expr2
expr1 -o expr2
expr1 -or expr2
expr1 , expr2
find
は,右から左まで式を評価しながら,それぞれのファイル名を起点
としたディレクトリツリーを,優先順位の規則に従い,(`-and'に対しては
左が偽,`-or'に対しては真となる)結果が分かるまで検索し,そして,
find
は次のファイル名へ移動します.
複雑な表現で役に立つ,2つのテストが他にあります.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |