\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename find-ja.info
@settitle Finding Files
@c For double-sided printing, uncomment:
@c @setchapternewpage odd
@c %**end of header

@c @documentlanguage ja

@set EDITION 1.1
@set VERSION 4.1
@set UPDATED November 1994

@iftex
@finalout
@end iftex

@ifinfo
@format
START-INFO-DIR-ENTRY
* Finding Files(ja): (find-ja). Listing and operating on files
                                that match certain criteria.
END-INFO-DIR-ENTRY
@end format

This file documents the GNU utilities for finding files that match
certain criteria and performing various operations on them.

Copyright (C) 1994 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).

@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.
@end ifinfo

@titlepage
@title Finding Files
@subtitle Edition @value{EDITION}, for GNU @code{find} version @value{VERSION}
@subtitle @value{UPDATED}
@author by David MacKenzie
@c 翻訳：西尾 太

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1994 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.
@end titlepage

@node Top, Introduction, , (dir)
@comment  node-name,  next,  previous,  up

@ifinfo
このファイルは，特定の基準に一致するファイルを検索し，それらに様々なアク
ションを実行するGNUユーティリティの説明です．これは，@code{find}のバージョ
ン@value{VERSION}に対する，エディション@value{EDITION}です．
@end ifinfo

@c The master menu, created with texinfo-master-menu, goes here.

@menu
* Introduction::                Summary of the tasks this manual describes.
* Finding Files::               Finding files that match certain criteria.
* Actions::                     Doing things to files you have found.
* Common Tasks::                Solutions to common real-world problems.
* Databases::                   Maintaining file name databases.
* File Permissions::            How to control access to files.
* Reference::                   Summary of how to invoke the programs.
* Primary Index::               The components of @code{find} expressions.
@end menu

@node Introduction, Finding Files, Top, Top
@chapter はじめに

このマニュアルは，指定した基準にあったファイルを検索する方法と，見つけた
ファイルに様々なアクションを実行する方法を示します．これらの作業を実行す
るために使用する主なプログラムは，@code{find}，@code{locate}，そして
@code{xargs}です．このマニュアルにある例は，これらのプログラムのGNUバー
ジョン特有の能力を使用します．

GNU @code{find}は，元々Eric Deckerによって書かれ，David MacKenzie，Jay
Plett，そしてTim Woodによって拡張されました．GNU @code{xargs}は，元々
Mike Rendellによって書かれ，David MacKenzieによって拡張されました．GNU
@code{locate}とそれに関連するユーティリティは，元々James Woodsによって書
かれ，David MacKenzieよって拡張されました．@samp{find -print0}と
@samp{xargs -0}に関するアイデアは，Dan Bernsteinによります．その他，多く
の人がバグの修正，小さな改良，そして有益な提案を寄与してくれました．どう
もありがとう！

これらのプログラムに関するメールでの提案とバグの報告先は
@code{bug-gnu-utils@@prep.ai.mit.edu}になります．@samp{find --version}を
実行して得られるバージョンナンバーを含めてください．

@menu
* Scope::
* Overview::
* find Expressions::
@end menu

@node Scope
@section スコープ

簡潔にするため，このマニュアル内の単語@dfn{ファイル}は，通常のファイル，
ディレクトリ，シンボリックリンク，またはディレクトリエントリを持つノード
のようなその他のあらゆるものを意味します．ディレクトリエントリは@dfn{ファ
イル名}とも呼ばれます．ファイル名は，ファイルに前置されるパス内のディレ
クトリを，いくつか含む，全て含む，または全く含まないかもしれません．この
マニュアルで``ファイル名''と呼ばれるものの全ての例があります．

@example
parser.c
README
./budget/may-94.sc
fred/.cshrc
/usr/local/include/termcap.h
@end example

@dfn{ディレクトリツリー}はディレクトリとそれが含むファイル，その全てのサ
ブディレクトリとそれが含むファイル等です．それは，単一のディレクトリでは
ないファイルとすることも可能です．

これらのプログラムは，一つまたはそれ以上のディレクトリツリー内部の，以下
のようなファイルを見つけることを可能にします．

@itemize @bullet
@item
特定のテキストや特定のパターンに一致する名前を持つもの．
@item
特定のファイルにリンクしているもの．
@item
最近の特定の期間に使用されたもの．
@item
特定の大きさの範囲にあるもの．
@item
特定の形式(通常のファイル，ディレクトリ，シンボリックリンク等)のもの．
@item
特定のユーザやグループに所有されているもの．
@item
特定のアクセス許可を持つもの．
@item
特定のパターンに一致するテキストを含むもの．
@item
ディレクトリツリーの特定の深さにあるもの．
@item
上記の組み合わせ．
@end itemize

一旦探しているファイル(または，探している可能性があるファイル)を見つける
と，単純なそれらの名前のリスト以上のものにすることが可能です．ファイルを
個別にまたは様々な大きさのまとまりとして，属性のあらゆる組み合わせを取得
したり，多くの方法で処理したりすることが可能です．見つけたファイル上で実
行したい動作は，以下のことだけに制限されません．

@itemize @bullet
@item
閲覧または編集．
@item
アーカイブへ保存．
@item
削除や名前の変更．
@item
アクセス許可の変更．
@item
グループ分け．
@end itemize

このマニュアルは，これらのそれぞれの作業を実行する方法と，それ以上のもの
を記述しています．


@node Overview
@section 概要

与えられた基準に一致するファイルのリストを作成し，その上でコマンドを実行
するために使用される主なプログラムは，@code{find}，@code{locate}，そして
@code{xargs}です．追加のコマンドは@code{updatedb}で，それは@code{locate}
が使用するデータベースを作成するために，システム管理者が使用します．

@code{find}はディレクトリ階層内でファイルを検索し，見つかったファイルの情報を出力します．以下のように実行します．

@example
find @r{[}@var{file}@dots{}@r{]} @r{[}@var{expression}@r{]}
@end example

@noindent
ここに典型的な@code{find}の使用方法があります．この例は，@file{/usr/src} 
をルートとしたディレクトリツリー内で，名前が@samp{.c}で終り，100Kバイト
以上の大きさを持つ，全てのファイルの名前を出力します．
@example
find /usr/src -name '*.c' -size +100k -print
@end example

@code{locate}は，特別なファイル名のデータベースで，パターンに一致するファ
イル名を探します．システム管理者は，データベースを作成するために
@code{updatedb}を実行します．@code{locate}は以下のように実行します．

@example
locate @r{[}@var{option}@dots{}@r{]} @var{pattern}@dots{}
@end example

@noindent
この例は，デフォルトファイル名のデータベースで，名前が@samp{Makefile}ま
たは@samp{makefile}で終わる，全てのファイルの名前を出力します．データベー
スに保存されるファイル名は，システム管理者が@code{updatedb}を実行した方
法に依存します．

@example
locate '*[Mm]akefile'
@end example

名前@code{xargs}は，EX-argsと発音され，それは``引数を統合する''という意
味があります．@code{xargs}は，標準入力で読み込む引数をかき集めることで構
築しコマンド行を実行します．これらの引数は，@code{find}で生成されるファ
イル名のリストとなることが最も多くなっています．@code{xargs}は，以下のよ
うに実行します．

@example
xargs @r{[}@var{option}@dots{}@r{]} @r{[}@var{command} @r{[}@var{initial-arguments}@r{]}@r{]}
@end example

@noindent
以下のコマンドは，ファイル@file{file-list}内にリストアップされているファ
イルを検索し，単語@samp{typedef}を含むものの全ての行を出力します．
@example
xargs grep typedef < file-list
@end example


@node find Expressions
@section @code{find}の式

ファイルを選択するために@code{find}が使用する式は，一つまたはそれ以上の
@dfn{プライマリ}から成り立ち，それらはそれぞれ分離した@code{find}へのコ
マンドライン引数です．@code{find}はそのたびに式を評価し，ファイルを処理
します．式は以下のプライマリの形式のいずれかを含むことが可能です．

@table @dfn
@item オプション(options)
特定のファイルの処理ではなく全体的な処理に影響を与えます．
@item テスト(tests)
ファイルの属性に依存し，真または偽の値を返します．
@item アクション(actions)
それらを評価するとき他の引数と連結し影響を与えます．
@end table

2つのプライマリの間のオペレータは省略可能です．そのデフォルトは
@samp{-and}です．プライマリをより複雑な式に連結する方法は，
@xref{Combining Primaries With Operators}.式が@samp{-prune}以外のアクショ
ンを含まない場合，全ての式が真である全てのファイルで，@samp{-print}が動
作します(@pxref{Print File Name})．

式の中にオプションがあるとき，それぞれのファイルに対し評価されるのではな
く，すぐに影響を与えます．そのため，明確にするため，式の最初にそれらを配
置するのが最善です．

プライマリの多くは引数をとり，それらは@code{find}への次のコマンドライン
引数の直後に続きます．引数は，ファイル名，パターン，またはその他の文字列
になるものもあります．それ以外は数字です．数字の引数は以下のように指定可
能です．

@table @code
@item +@var{n}
@var{n}より大きい．
@item -@var{n}
@var{n}より小さい．
@item @var{n}
@var{n}に等しい．
@end table


@node Finding Files, Actions, Introduction, Top
@chapter ファイル検索

デフォルトで，@code{find}は標準出力に，与えられた基準に一致するファイル
の名前を出力します．一致したファイルに関する詳細を取得する方法は，
@xref{Actions}.

@menu
* Name::
* Links::
* Time::
* Size::
* Type::
* Owner::
* Permissions::
* Contents::
* Directories::
* Filesystems::
* Combining Primaries With Operators::
@end menu

@node Name
@section 名前

基準パターンに一致する名前をもつファイルを検索する方法下記のようになりま
す．これらのテストでの@var{pattern}引数の記述については，@xref{Shell
Pattern Matching}.

これらのテストには，@samp{i}で始まる名前を持つ，大文字小文字を区別バージョ
ンと区別しないバージョンがあります．大文字小文字を区別しない比較では，パ
ターン@samp{fo*}と@samp{F??}は，ファイル名@file{Foo}，@samp{FOO}，
@samp{foo}，@samp{fOo}等に一致します．

@menu
* Base Name Patterns::
* Full Name Patterns::
* Fast Full Name Search::
* Shell Pattern Matching::      Wildcards used by these programs.
@end menu

@node Base Name Patterns
@subsection ベース名のパターン

@deffn Test -name pattern
@deffnx Test -iname pattern
ファイル名のベース(前置されるディレクトリが削除されたパス)がシェルパター
ン@var{pattern}に一致する場合は真です． @samp{-iname}の場合は，大文字小
文字の区別をしない一致です．ディレクトリツリー全体を無視するために，
@samp{-prune}を使用して下さい(@pxref{Directories})．例として，
@file{/usr/local/doc}のTexinfoソースファイルを見つけるため以下のようにし
ます．

@example
find /usr/local/doc -name '*.texi'
@end example
@end deffn


@node Full Name Patterns
@subsection 完全なファイル名のパターン

@deffn Test -path pattern
@deffnx Test -ipath pattern
見つかったファイルで，コマンドライン引数で始まるファイル名全体がシェルパ
ターン@var{pattern}に一致する場合は真です．@samp{-ipath}の場合は，大文字
小文字を区別しません．ディレクトリツリー全体を無視するために，ツリーの全
てのファイルを調査するのではなく，@samp{-prune}を使用してください．
@end deffn

@deffn Test -regex expr
@deffnx Test -iregex expr
ファイル名全体が正規表現@var{expr}に一致する場合は真です．これはパス全体
への一致で，サーチではありません．例えば，@file{./fubar3}というファイル
名に一致させるため，正規表現@samp{.*bar.}や@samp{.*b.*3}は使用可能ですが，
@samp{b.*r3}は不可能です．正規表現の構文の記述は，@xref{Regexps, ,
Syntax of Regular Expressions, emacs, The GNU Emacs Manual}.
@samp{-iregex}の場合は，大文字小文字を区別しません．
@end deffn

@node Fast Full Name Search
@subsection すばやい完全な名前の検索

実際にディスク上のディレクトリをスキャンすることなく(きっと遅いでしょう)，
ファイルを名前で検索するために，@code{locate}プログラムを使用することが
可能です．与えたそれぞれのシェルパターンに対し，@code{locate}は，一つま
たはそれ以上のファイル名のデータベースを検索し，パターンを含むファイル名
を表示します．シェルパターンの詳細は，@xref{Shell Pattern Matching}.

パターンが---メタ文字を含まない---平文の場合，@code{locate}は，文字列を
含む全てのファイル名を表示します．パターンがメタ文字を含む場合，
@code{locate}はパターンに正確に一致しているファイル名のみ表示します．結
果として，メタ文字を含むパターンは，通常@samp{*}で開始すべきで，同じもの
で終わることが最も多くなっています．例外は，ファイル名の最初または最後へ
の，明示的な一致を試みるパターンです．

以下のコマンドは，
@example
locate @var{pattern}
@end example

こちらとほとんど等価です．
@example
find @var{directories} -name @var{pattern}
@end example

ここでの@var{directories}は，情報を含むファイル名データベースのディレク
トリです．違いは@code{locate}情報が古い可能性があり，そして，
@code{locate}は@code{find}とわずかに異なるパターンでワイルドカードを扱う
ことです(@pxref{Shell Pattern Matching}) ．

ファイル名データベースは，データベースが最後に更新されたときにシステムに
存在したファイルのリストを含みます．システム管理者はデフォルトのデータベー
スのファイル名，データベースを更新する頻度，そして，エントリーを含むディ
レクトリを選択することが可能です．

ここに，@code{locate}が検索するファイル名データベースを選択する方法があ
ります．デフォルトはシステムに依存します．

@table @code
@item --database=@var{path}
@itemx -d @var{path}
デフォルトのファイル名データベースを検索する代わりに，@var{path}内のファ
イル名データベースを検索し，それはコロンで分けられたデータベースのファイ
ル名リストとなります．検索するデータベースファイルのリストを設定するため
に，環境変数@code{LOCATE_PATH}を使用することも可能です．両方使用されてい
る場合，オプションは環境変数に優先します．
@end table


@node Shell Pattern Matching
@subsection シェルパターンマッチング

@code{find}と@code{locate}は，ファイル名やファイル名の一部を，シェルパター
ンと比較することが可能です．@dfn{シェルパターン}は，以下の特殊文字を含む
可能性がある文字列で，それは@dfn{ワイルドカード}や@dfn{メタ文字}をして知
られています．

メタ文字を含むパターンを，シェルがそれ自身を展開することから避けるため引
用符で囲む必要があります．二重引用符とシングル引用符の両方が動作します．
そのため，(それ自身は)バックスラッシュでエスケープします．

@table @code
@item *
ゼロ以上の文字に一致します．

@item ?
あらゆる一文字に一致します．

@item [@var{string}]
文字列@var{string}に存在する，正確に1文字に一致します．これは@dfn{文字集
合}と呼ばれます．短いものとして，@var{string}は範囲を含めることが可能で，
それは間にダッシュがある２つの文字です．例えば，集合@samp{[a-z0-9_]}は小
文字，数字，またはアンダースコアです．@samp{!}や@samp{^}を開括弧の前に配
置することで，否定集合も可能です．このため，@samp{[^A-Z@@]}は大文字とアッ
トマーク以外に一致します．

@item \
以下の特殊文字の意味をなくします．これは文字集合でも動作します．
@end table

@code{find}がシェルのパターンマッチ(@samp{-name}，@samp{-path}等)で行な
うテストでは，パターンの中のワイルドカードはファイル名の最初の@samp{.}に
一致しません．これは@code{locate}ではそうなりません．このため，
@samp{find -name '*macs'}は@file{.emacs}に一致しませんが，@samp{locate
'*macs'}では一致します．

スラッシュ文字は，@code{find}と@code{locate}が行なうシェルのパターンマッ
チで特殊な意味はなく，ワイルドカードがそれに一致しないシェルとは異なりま
す．そのため，パターン@samp{foo*bar}はファイル名@samp{foo3/bar}に一致し，
パターン@samp{./sr*sc}はファイル名@samp{./src/misc}に一致するはずです．


@node Links
@section リンク

ファイルをお互いにリンクすること可能にする２つの方法があります．@dfn{シ
ンボリックリンク(symbolic link)}は，他のファイルの名前の部分が内容になる，
ファイルの特殊な形式です．@dfn{ハードリンク(hard link)}は，一つのファイ
ルに対する，複数のディレクトリエントリですファイル名のすべては同じインデッ
クスノード(@dfn{inode})番号をディスク上に持ちます．

@menu
* Symbolic Links::
* Hard Links::
@end menu

@node Symbolic Links
@subsection シンボリックリンク

@deffn Test -lname pattern
@deffnx Test -ilname pattern
ファイルがシェルパターン@var{pattern}に一致する内容のシンボリックリンク
の場合は真です．@samp{-ilname}の場合は，大文字小文字を区別しない一致です．
@var{pattern}引数の詳細は，@xref{Shell Pattern Matching}.そして，現在の
ディレクトリとそのサブディレクトリ内の，@file{sysdep.c}へのあらゆるシン
ボリックリンクをリストアップするために，以下のようにして行なうことができ
ます．

@example
find . -lname '*sysdep.c'
@end example
@end deffn

@deffn Option -follow
シンボリックリンクと異なります．このオプションを与えた時の動作には，以下
の違いがあります．

@itemize @bullet
@item
@code{find}は，ディレクトリツリーを検索する時，ディレクトリへのシンボリッ
クリンクをたどります．
@item
@samp{-lname}と@samp{-ilname}は常に偽を返します．
@item
@samp{-type}はシンボリックリンクが示すファイルの形式を報告します．
@item
暗黙に@samp{-noleaf}を指定します(@pxref{Directories})．
@end itemize
@end deffn


@node Hard Links
@subsection ハードリンク

ハードリンクを探すため，最初に見つけたいファイルにリンクしているファイル
のinodeナンバーを取得します．@samp{ls -i}や@samp{find -ls}を実行すること
で，ファイルのinodeナンバーとそれへのリンクの数を知ることが可能です．ファ
イルに1つ以上のリンクがある場合，そのinodeナンバーを@samp{-inum}に渡すこ
とで，他のリンクを検索することが可能です．多くのシステムの@file{/usr}の
ように，他のファイルシステムをマウントしているディレクトリを起点に検索を
開始している場合は，@samp{-xdev}オプションを加えて下さい．ファイルへのハー
ドリンクは同じファイルシステムに存在する必要があるので，これを行なうこと
で不要な検索を防ぎます．@xref{Filesystems}.

@deffn Test -inum n
ファイルがinodeナンバー@var{n}を持つかどうかの調査．
@end deffn

@samp{-links}を用いると，特定の数のリンクを持つファイルを検索することも
可能です．ディレクトリは通常，少なくとも2つのハードリンクがあります．そ
れらの@file{.}エントリは2番目のものです．サブディレクトリがある場合，そ
れは個別に親ディレクトリを示す@file{..}と呼ばれるハードリンクもあります．

@deffn Test -links n
ファイルが@var{n}個のハードリンクを持つかどうかの調査．
@end deffn


@node Time
@section 時間

それぞれのファイルには3つのタイムスタンプがあり，それらはファイルに対し
て特定な処理を実行した，最後の時間を記録します．

@enumerate
@item
アクセス(ファイルの内容を読み込む)
@item
ステータスの変更(ファイルの編集や属性の変更)
@item
編集(ファイルの内容を変更)
@end enumerate

タイムスタンプが特定の範囲にあるファイルを検索したり，他のタイムスタンプ
と比較したりすることが可能です．

@menu
* Age Ranges::
* Comparing Timestamps::
@end menu

@node Age Ranges
@subsection 期間の範囲

これらのテストは，範囲(@samp{+@var{n}}と@samp{-@var{n}})を用いる場合に，
主に役立ちます．

@deffn Test -atime n
@deffnx Test -ctime n
@deffnx Test -mtime n
ファイルの最後のアクセス(またはステータスの変更，または編集)が，
@var{n}*24時間前の場合は真です．
@end deffn

@deffn Test -amin n
@deffnx Test -cmin n
@deffnx Test -mmin n
ファイルの最後のアクセス(またはステータスの変更，または編集)が，@var{n} 
分前の場合は真です．これらのテストは，@samp{-atime}等よりもより細かな計
測を提供します．例えば，@file{/u/bill}内の最後に読み込まれたのが2〜6分
@footnote{訳注：原文はhours(時間)だが間違いと思われる．} 前のファイルを
リストアップするために以下のようにします．

@example
find /u/bill -amin +2 -amin -6
@end example
@end deffn

@deffn Option -daystart
24時間前ではなく今日の最初から時間をはかります．そのため，ホームディレク
トリ内で昨日編集された通常のファイルをリストアップするために，以下のよう
にします．

@example
find ~ -daystart -type f -mtime 1
@end example
@end deffn


@node Comparing Timestamps
@subsection タイムスタンプの比較

タイムスタンプを現在の時間と比較する代わりに，それを他のファイルのタイム
スタンプと比較することが可能です．そのファイルのタイムスタンプは，いくつ
かのイベントによって，他のプログラムによって更新されるかもしれません．ま
た，@code{touch}コマンドを使用して，特定の固定した日付に設定することもで
きるでしょう．例えば，今年の1月1日移行に編集された@file{/usr}内のファイ
ルをリストアップするために，以下のようにします．

@c Idea from Rick Sladkey.
@example
touch -t 02010000 /tmp/stamp$$
find /usr -newer /tmp/stamp$$
rm -f /tmp/stamp$$
@end example

@deffn Test -anewer file
@deffnx Test -cnewer file
@deffnx Test -newer file
ファイルが最後にアクセス(またはステータスの変更，または編集)されたのが
@var{file}の編集以降の場合は真です．これらのテストは，@samp{-follow}がコ
マンドラインのそれら(のオプション)の前にある場合のみ，@samp{-follow}影響
を受けます．

@example
find . -newer /bin/sh
@end example
@end deffn

@deffn Test -used n
ファイルが最後にアクセスされたのが，そのステータスが最後に変更されてから
@var{n}日後の場合は真です．使用されておらず，ディスクスペースを確保する
ために圧縮または削除されたファイルを探すのに役立ちます．
@end deffn


@node Size
@section サイズ

@deffn Test -size n@r{[}bckw@r{]}
切上げで@var{n}単位領域をファイルが使用している場合は真です．単位はデフォ
ルトで512バイトブロックですが，@var{n}の接尾子として1文字加えることで変
更可能です．

@table @code
@item b
512バイトブロック単位
@item c
バイト単位
@item k
キロバイト(1024バイト)単位
@item w
2バイトワード単位
@end table

サイズは間接的なブロックを数えませんが，実際には割り当てられていない疎ら
なファイル内のブロックは数えます．
@end deffn

@deffn Test -empty
ファイルが空の場合で，通常のファイルまたはディレクトリのどちらかの場合は
真です．これで，削除に適した候補が作成されるでしょう．このテストは，
@samp{-depth} (@pxref{Directories})と@samp{-exec rm -rf '@{@}' ';'}
(@pxref{Single File})とともに用いた場合，役に立ちます．
@end deffn


@node Type
@section 形式

@deffn Test -type c
ファイルが@var{c}の形式の場合は真です．

@table @code
@item b
(バッファされる)ブロックスペシャルファイル
@item c
(バッファされない)ブロックスペシャルファイル
@item d
ディレクトリ
@item p
名前付きパイプ(FIFO)
@item f
通常のファイル
@item l
シンボリックリンク
@item s
ソケット
@end table
@end deffn

@deffn Test -xtype c
ファイルがシンボリックリンクでない場合，@samp{-type}と同じです．シンボリッ
クリンクに対しては以下のようになります．@samp{-follow}が与えられていない
場合，ファイルが@var{c}形式のファイルにリンクしている場合は真です．
@samp{-follow}が与えられている場合，@var{c}が@samp{l}の場合は真です．言
い替えると，シンボリックリンクに対し，@samp{-xtype}は，@samp{-type}が調
査しないファイルの形式を調査します．@samp{-follow}の詳細は，
@xref{Symbolic Links}.
@end deffn


@node Owner
@section 所有者

@deffn Test -user uname
@deffnx Test -group gname
ファイルが(グループ@var{gname}に所属する)ユーザ@var{uname}に所有されてい
る場合は真です．数字のIDも可能です．
@end deffn

@deffn Test -uid n
@deffnx Test -gid n
ファイルの数字のユーザID(グループID)が@var{n}の場合は真です．これらのテ
ストは，@samp{-user}と@samp{-group}とは異なり，範囲指定(@samp{+@var{n}}
と@samp{-@var{n}}) をサポートします．
@end deffn

@deffn Test -nouser
@deffnx Test -nogroup
ファイルの数字のユーザIDに対応するユーザがいない(数字のグループIDに対応
するグループがない)場合は真です．これらの場合は，通常，システムから削除
されているためにユーザに属さなくなったファイルを意味します．そのようなファ
イルの所有権を，@code{chown}や@code{chgrp}プログラムを使用して，既存の
ユーザとグループに変更したほうが良いでしょう．
@end deffn


@node Permissions
@section 許可

ファイルの許可の構造とそれを指定する方法に関する情報は，@xref{File
Permissions}.

@deffn Test -perm mode
ファイルの許可が正確に@var{mode}(数値的でも象徴的でも可能です)と同一の場
合は真です．象徴的なモードは，0を起点として使用します．@var{mode}が
@samp{-}で始まっている場合，@var{mode}の許可が@emph{すべて}ファイルに設
定されている場合は真です．@var{mode}に設定されていない許可は無視されます．
@var{mode}が@samp{+}で始まっている場合，@var{mode}の許可が@emph{ひとつで
も}ファイルに設定されている場合は真です．@var{mode}に設定されていない許
可は無視されます．
@end deffn


@node Contents
@section 内容

ファイルの内容を基に検索するために，@code{grep}プログラムを使用すること
が可能です．例えば，現在のディレクトリで，文字列@samp{thing}を含むCのソー
スファイルを見つけるためには，以下のようにすることで可能となります．

@example
grep -l thing *.[ch]
@end example

サブディレクトリのファイルの文字列を検索したい時も，以下のように
@code{find}と@code{xargs}を用いて，@code{grep}を組み合わせることが可能で
す．

@example
find . -name '*.[ch]' | xargs grep -l thing
@end example

@code{grep}は@samp{-l}オプションで，文字列を含む行ではなくそれを含むファ
イル名のみ出力します．文字列の引数(@samp{thing})は，実際には正規表現で，
そのためメタ文字を含みます．この方法で，@code{find}の出力がない場合は
@code{xargs}に@code{grep}を実行させないように，@samp{-r}オプションを使用
したり，名前にスペースを含んでいて間違って解釈することを防ぐために，
@code{find}のアクション@samp{-print0}と@code{xargs}のオプション@samp{-0} 
を使用することで改善が可能です．

@example
find . -name '*.[ch]' -print0 | xargs -r -0 grep -l thing
@end example

パターンに一致する内容があるファイルを見つけるためのより完全な扱いは，
@code{grep}のマニュアルページを参照して下さい．


@node Directories
@section ディレクトリ

ディレクトリでの@code{find}の検索を制御し，それらを検索する方法がここに
あります．これらの2つのオプションで，ディレクトリツリーを輪切りにする処
理が可能となります．

@deffn Option -maxdepth levels
コマンドライン引数以下の，最大@var{levels}(正の整数)のレベルのディレクト
リまで下ります．@samp{-maxdepth 0}はコマンドライン引数のみ，テストとアク
ションを適用することを意味します．
@end deffn

@deffn Option -mindepth levels
@var{levels}(正の整数)未満のレベルではテストもアクションも適用しません．
@samp{-mindepth 1}はコマンドライン引数以外のすべてのファイルを処理するこ
とを意味します．
@end deffn

@deffn Option -depth
ディレクトリ自身の前に，それぞれのディレクトリの内容を処理します．
@code{cpio}や@code{tar}でファイルのリストを生成する時，これを行なうのは
良い考えです．ディレクトリにその所有者に対する書き込み許可がない場合，ディ
レクトリの許可はその内容のあとで復元されるため，その内容はアーカイブから
復元することが可能です．
@end deffn

@deffn Action -prune
@samp{-depth}が与えられていない場合は真です，現在のディレクトリから下り
ません．@samp{-depth}が与えられている場合は，偽です．効果はありません．
@samp{-prune}は，その式の前ではなく，後にあるテストとアクションにのみ効
果があります．

例えば，ディレクトリ@file{src/emacs}と，そのすべてのファイルと，それ以下
のディレクトリを省略し，それ以外で見つかったファイルの名前を出力するため
に以下のようにします．

@example
find . -path './src/emacs' -prune -o -print
@end example
@end deffn

@deffn Option -noleaf
ディレクトリが，ハードリンクの数より2少ないサブディレクトリを含むことを
仮定することで，最適化を行ないません．このオプションは，CD-ROMやMS-DOSファ
イルシステムやAFSボリュームマウントポイントといった，Unixのディレクトリ
リンクの規約に従わないファイルシステムを検索する時に必要です．通常のUnix 
のファイルシステムのそれぞれのディレクトリは，少なくとも2つのハードリン
クがあります．その名前とその@file{.}エントリです．更に，そのサブディレク
トリ(が存在する場合)には，そのディレクトリにリンクしている@file{..}エン
トリが，それぞれにあります．@code{find}がディレクトリを調査している時，
ディレクトリのリンク数よりサブディレクトリが2つ少ないことがはっきりした
後で，それはディレクトリのエントリの残りがディレクトリでない(ディレクト
リ内の@dfn{leaf}ツリー)ことが分かります．ファイルの名前のみ調査に必要な
場合は，それらをはっきりさせる必要はありません．これで検索スピードが飛躍
的に増加します．
@end deffn


@node Filesystems
@section ファイルシステム

@dfn{ファイルシステム}とはディスクの区分のことで，それはローカルホスト，
または，ネットワーク経由のリモートホストからマウントされたもののいずれか
になります．ネットワークファイルシステムを検索すると遅くなるはずなので，
通常は@code{find}がそうすることを避けます．

特定のファイルシステムの検索を避ける2つの方法があります．一つの方法は，
@code{find}に１つのファイルシステムのみを検索するよう伝えることです．

@deffn Option -xdev
@deffnx Option -mount
他のファイルシステムのディレクトリに下りません．これらのオプションは同じ
です．
@end deffn

もう一つの方法は，それぞれのファイルがあるファイルシステムの形式を調査し，
好ましくないファイルシステムの形式にあるディレクトリに下らないようにしま
す．

@deffn Test -fstype type
ファイルが，形式@var{type}のファイルシステム上にある場合は真です．有効な
ファイルシステム形式は，Unixの異なるバージョン間で異なります．いくつかの
バージョンのUnixなどが受け入れる，ファイルシステムの形式の不完全なリスト
は，以下のとおりです．
@example
ufs 4.2 4.3 nfs tmp mfs S51K S52K
@end example
ファイルシステムの形式を知るために，@samp{%F}指示語とともに
@samp{-printf}を使用することが可能です．@xref{Print File Information}.リ
モートファイルシステムの検索を避けるために，@samp{-fstype}は通常，
@samp{-prune}とともに使用されます．(@pxref{Directories}).
@end deffn


@node Combining Primaries With Operators
@section オペレーターの主なものを組み合わせる

オペレータはテストとアクションから，複雑な表現を構築します．オペレータは
優先順位が下がる順序で，以下のものがあります．

@table @code
@item @asis{( @var{expr} )}
優先順位をあげます．@var{expr}が真の場合は真です．

@item @asis{! @var{expr}}
@itemx @asis{-not @var{expr}}
@var{expr}が偽の場合は真です．

@item @asis{@var{expr1 expr2}}
@itemx @asis{@var{expr1} -a @var{expr2}}
@itemx @asis{@var{expr1} -and @var{expr2}}
And(論理積)です．@var{expr1}が偽の場合，@var{expr2}は評価されません．

@item @asis{@var{expr1} -o @var{expr2}}
@itemx @asis{@var{expr1} -or @var{expr2}}
Or(論理和)です．@var{expr1}が真の場合，@var{expr2}は評価されません．

@item @asis{@var{expr1} , @var{expr2}}
リストです．@var{expr1}と@var{expr2}は，常に評価されます．@var{expr2}が
真の場合は真です．@var{expr1}の値は放棄されます．このオペレータで，一回
の処理で，他の処理が成功したかどうかに依存せず，複数の独立した処理を行な
うことができます．
@end table

@code{find}は，右から左まで式を評価しながら，それぞれのファイル名を起点
としたディレクトリツリーを，優先順位の規則に従い，(@samp{-and}に対しては
左が偽，@samp{-or}に対しては真となる)結果が分かるまで検索し，そして，
@code{find}は次のファイル名へ移動します．

複雑な表現で役に立つ，２つのテストが他にあります．

@deffn Test -true
常に真です．
@end deffn

@deffn Test -false
常に偽です．
@end deffn


@node Actions, Common Tasks, Finding Files, Top
@chapter アクション

@code{find}の式で与えた基準に一致するファイルの情報を出力する方法が，い
くつかあります．標準出力または指名したファイルに，情報を出力することが可
能です．ファイル名を引数として，コマンドを実行することも可能です．これら
のコマンドを，選択したファイルへのフィルターとして以外でも使用することが
可能です．

@menu
* Print File Name::
* Print File Information::
* Run Commands::
* Adding Tests::
@end menu

@node Print File Name
@section ファイル名の出力

@deffn Action -print
真の時，完全なファイル名を標準出力に出力し，改行を続けます．
@end deffn

@deffn Action -fprint file
真の時，完全なファイル名をファイル@var{file}に出力し，改行を続けます．
@code{find}の実行時に@var{file}が存在しない場合は作成されます．存在する
場合は0バイトに切り詰められます．ファイル名@file{/dev/stdout}と
@file{/dev/stderr}は，特別な扱いをされます．それらはそれぞれ，標準出力と
標準エラー出力を参照します．
@end deffn


@node Print File Information
@section ファイル情報の出力

@deffn Action -ls
真の時，現在のファイルを@samp{ls -dils}の書式で標準出力にリストアップし
ます．出力はこのようになります．

@smallexample
204744   17 -rw-r--r--   1 djm      staff       17337 Nov  2  1992 ./lwall-quotes
@end smallexample

フィールドは以下のとおりです．

@enumerate
@item
ファイルのinodeナンバーです．inodeナンバーを元にしたファイルの検索方法は，
@xref{Hard Links}.

@item
ファイルのブロック数です．ブロック計算は，512バイトブロック単位を使用す
る環境変数@code{POSIXLY_CORRECT}が設定されていない場合，1Kブロック単位で
す．サイズを元にしたファイルの検索方法は，@xref{Size}.

@item
ファイルの形式と許可です．形式は，通常のファイルに対してはダッシュで表示
されます．それ以外のファイル形式に対しては，@samp{-type}に対して使用され
る文字です(@pxref{Type})．許可は，読み込み，書き込み，そして実行で，それ
ぞれファイルの所有者，そのグループ，そしてその他のユーザに対するものです．
ダッシュは許可が与えられていないことを意味します．ファイルの許可の詳細は，
@xref{File Permissions}.その許可を元にしたファイルの検索方法は，
@xref{Permissions}.

@item
ファイルに対するハードリンクの数です．

@item
ファイルを所有しているユーザです．

@item
ファイルのグループです．

@item
ファイルのバイト単位のサイズです．

@item
ファイルが竿語の編集された日付です．

@item
ファイル名です．@samp{-ls}は，ファイル名で使用されている出力不可能な文字
を，Cのようなバックスラッシュエスケープを使用して引用符で囲みます．
@end enumerate
@end deffn

@deffn Action -fls file
真の時，@samp{-ls}に似ていますが，@samp{-fprint}のように@var{file}に書き
出します(@pxref{Print File Name})．
@end deffn

@deffn Action -printf format
真の時，@samp{\}エスケープと@samp{%}指示語を解釈しながら，@var{format}を
標準出力に出力します．フィールドの幅と精度は，C関数の@code{printf}の用に
指定可能です．@samp{-print}とは異なり，@samp{-printf}は文字列の終りに改
行を追加しません．
@end deffn

@deffn Action -fprintf file format
真の時，@samp{-printf}に似ていますが，@samp{-fprint}のように@var{file}に
書き出します(@pxref{Print File Name})．
@end deffn

@menu
* Escapes::
* Format Directives::
* Time Formats::
@end menu

@node Escapes
@subsection エスケープ

@samp{-printf}と@samp{-fprintf}で認識されるエスケープは以下のとおりです．

@table @code
@item \a
アラームベル．
@item \b
バックスペース．
@item \c
この書式の直後出力の停止し，出力をフラッシュ．
@item \f
フォームフィード．
@item \n
改行．
@item \r
キャリッジリターン．
@item \t
水平タブ．
@item \v
垂直タブ．
@item \\
バックスラッシュそのもの(@samp{\})．
@end table

@samp{\}文字に他の文字が続くものは，通常の文字として扱われるので，両方が
出力され，(おそらくそれは入力ミスなので)標準エラー出力に警告メッセージが
出力されます．


@node Format Directives
@subsection 書式指示語

@samp{-printf}と@samp{-fprintf}は，処理しているファイルに関する情報を出
力するため，以下の書式指示語をサポートします．Cの@code{printf}関数と異な
り，それらはフィールド幅の指定をサポートしていません．

@samp{%%}はパーセント記号そのものです．他の文字が続く@samp{%}文字は削除
され(が，それ<%>以外の文字は出力され)，(おそらく入力ミスのため)標準出力
に警告メッセージが出力されます．

@menu
* Name Directives::
* Ownership Directives::
* Size Directives::
* Location Directives::
* Time Directives::
@end menu

@node Name Directives
@subsubsection 名前指示語

@table @code
@item %p
ファイル名．
@item %f
前置されるディレクトリを削除したファイル名(最後の要素のみ)．
@item %h
ファイル名に前置されるディレクトリ(最後の要素とその前のスラッシュ以外す
べて)．
@item %P
ファイル名で，それが見つけられたコマンドライン引数の名前は，最初から削除
されます．
@item %H
それによりファイルが見つけられた，コマンドライン引数．
@end table


@node Ownership Directives
@subsubsection 所有者指示語

@table @code
@item %g
ファイルのグループ名，または名前がない場合はグループID．
@item %G
ファイルの数値的なグループID．
@item %u
ファイルのユーザ名，または名前がない場合はユーザID．
@item %U
ファイルの数値的なユーザID．
@item %m
ファイルの許可(8進数)
@end table


@node Size Directives
@subsubsection サイズ指示語

@table @code
@item %k
1Kブロック単位でのファイルサイズ(切上げ)．
@item %b
512バイトブロック単位でのファイルサイズ(切上げ)．
@item %s
バイト単位でのファイルサイズ．
@end table


@node Location Directives
@subsubsection 位置指示語

@table @code
@item %d
ディレクトリツリーでのファイルの深さ．コマンドラインのファイル名は，深さ
が0です．
@item %F
ファイルが存在するファイルシステム．この値は，@samp{-fstype}で使用される
はずです(@pxref{Directories})．
@item %l
シンボリックリンクのオブジェクト(ファイルがシンボリックリンクでない場合
は空文字です．)
@item %i
ファイルのinodeナンバー(10進数)．
@item %n
ファイルのハードリンクのナンバー．
@end table


@node Time Directives
@subsubsection 時間指示語

これらの指示語にはCの@code{ctime}関数を使用するものもあります．その出力
は現在のロケールに依存しますが，典型的なものは以下のようになります．

@example
Wed Nov  2 00:42:36 1994
@end example

@table @code
@item %a
Cの@code{ctime}関数で返される書式での，ファイルの最後にアクセスされた時
間．
@item %A@var{k}
@var{k}で指定される書式での，ファイルの最後にアクセスされた時間
(@pxref{Time Formats})．
@item %c
Cの@code{ctime}関数で返される書式での，ファイルの最後にステータスが変更
された時間．
@item %C@var{k}
@var{k}で指定される書式での，ファイルの最後にステータスが変更された時間
(@pxref{Time Formats})．
@item %t
Cの@code{ctime}関数で返される書式での，ファイルの最後に編集された時間．
@item %T@var{k}
@var{k}で指定される書式での，ファイルの最後に編集された時間(@pxref{Time
Formats})．
@end table


@node Time Formats
@subsection 時間の書式

以下は，指示語@samp{%A}，@samp{%C}，そして@samp{%T}に対する書式で，それ
はファイルのタイムスタンプを出力します．これらの書式には，Cの
@code{strftime}関数のシステム間での違いにより，すべてのシステムで利用可
能でないものもあります．

@menu
* Time Components::
* Date Components::
* Combined Time Formats::
@end menu

@node Time Components
@subsubsection 時間の内容

以下の書式指示語は，時間の単一の内容を出力します．

@table @code
@item H
時間(00..23)
@item I
時間(01..12)
@item k
時間( 0..23)
@item l
時間( 1..12)
@item p
ロケールの午前や午後
@item Z
タイムゾーン(例えば，EDT)，またはタイムゾーンが定義されていない場合は何
も出力しない．
@item M
分(00..59)
@item S
秒(00..61)
@item @@
1970年1月1日00:00 GMT以来の秒．
@end table


@node Date Components
@subsubsection 日付の内容

以下の書式指示語は，日付の単一の内容を出力します．

@table @code
@item a
ロケールの略記された曜日名(Sun..Sat)
@item A
ロケールの完全な曜日名，可変長(Sunday..Saturday)
@item b
@itemx h
ロケールの略記された月名(Jan..Dec)
@item B
ロケールの完全な月名，可変長(January..December)
@item m
月(01..12)
@item d
日(01..31)
@item w
曜日(0..6)
@item j
年間の日付(001..366)
@item U
日曜日を週の最初の日とした時の，年間の週数(00..53)
@item W
月曜日を週の最初の日とした時の，年間の週数(00..53)
@item Y
年(1970@dots{})
@item y
年の最後の2桁(00..99)
@end table


@node Combined Time Formats
@subsubsection 時間の書式の組み合わせ

以下の書式指示語は，時間と日付の組み合わせを出力します．

@table @code
@item r
時間，12時間制(hh:mm:ss [AP]M)
@item T
時間，24時間制(hh:mm:ss)
@item X
ロケールの時間表現(H:M:S)
@item c
ロケールの日付と時間(Sat Nov 04 12:02:33 EST 1989)
@item D
日付(mm/dd/yy)
@item x
ロケールの日付表現(mm/dd/yy)
@end table


@node Run Commands
@section コマンドの実行

@code{find}や@code{locate}で作成されたファイル名のリストを，他のコマンド
への引数として使用可能です．この方法で，ファイルへの任意の動作を実行する
ことが可能です．

@menu
* Single File::
* Multiple Files::
* Querying::
@end menu

@node Single File
@subsection 単一のファイル

ここに一つのファイルへのコマンドを，一度に実行する方法があります．

@deffn Action -exec command ;
@var{command}を実行します．0のステータスが返される場合は真です．
@code{find}は，@samp{-exec}以降のすべての引数を，@samp{;}から成り立つ引
数に到達するまで，コマンドの部分として受けとります．それは，文字列
@samp{@{@}}を現在のファイル名で置換し，コマンドにそれがある場所で処理さ
れます．これらの構文はどちらも，シェルによる展開を防ぐために(@samp{\}を
用いて)エスケープしたり，引用符で囲む必要があります．コマンドは，
@code{find} を実行しているディレクトリで実行されます．

例えば，現在のディレクトリのそれぞれのCのヘッダファイルを，ファイル
@file{/tmp/master}と比較するために以下のようにします．

@example
find . -name '*.h' -exec diff -u '@{@}' /tmp/master ';'
@end example
@end deffn


@node Multiple Files
@subsection 複数のファイル

単一のファイルを処理する必要がある時もあります．しかし，それができない時，
ファイル毎にコマンドを実行するより，できるだけ多くのファイルをコマンドで
実行した方が速くなります．これを行なうことで，それぞれのコマンドを開始す
る時間を稼ぐことになります．

一度に一つ以上のファイルをコマンドで実行するために，@code{xargs}コマンド
を使用し，以下のように呼び出して下さい．

@example
xargs @r{[}@var{option}@dots{}@r{]} @r{[}@var{command} @r{[}@var{initial-arguments}@r{]}@r{]}
@end example

@code{xargs}は標準入力から引数を読み込み，それは空白(それは，ダブルクオー
トやシングルクオートまたはバックスラッシュで保護可能)や改行で分離されて
います．それは@var{command} (デフォルトで@file{/bin/echo})を，標準入力か
ら読み込まれた引数が続くあらゆる@var{initial-arguments}を用いて，一回以
上実行します．標準入力の空白行は無視されます．

空白の分離名の代わりに，@samp{find -print0}や@samp{find -fprint0}を使用
し，GNU @code{xargs}，GNU @code{tar}，GNU @code{cpio}，または@code{perl}
へ，@samp{-0}や@samp{--null}オプションを与えて，出力を処理した方が安全で
す．

以下のように，引数リストを処理するためシェルコマンドの置換(バッククオー
ト)を使用することが可能です．

@example
grep -l sprintf `find $HOME -name '*.c' -print`
@end example

しかし，その方法は，@samp{.c}ファイル名の長さが，オペレーティングシステ
ムのコマンドラインの長さの制限を超過する場合，エラーが生じるでしょう．
@code{xargs}は，制限を超過しないようにするために必要なだけコマンドを実行
することで，その問題を避けます．

@example
find $HOME -name '*.c' -print | grep -l sprintf
@end example

しかし，標準入力が端末であることを必要とするコマンド(例えば，
@code{less})の場合，シェルコマンドの置換の手法を使用する必要があります．

@menu
* Unsafe File Name Handling::
* Safe File Name Handling::
* Limiting Command Size::
* Interspersing File Names::
@end menu

@node Unsafe File Name Handling
@subsubsection 安全でないファイル名の扱い

ファイル名には，引用符，バックスラッシュ，空白文字，そして改行でさえ含め
ることが可能なので，処理のデフォルトモードで@code{xargs}を使用しながらそ
れを処理することは安全ではありません．しかし，ほとんどのファイル名は空白
を含まないので，この問題は滅多に発生しません．安全なファイル名だと知って
いるファイルを検索している場合のみ，それについて悩む必要はありません．

@c This example is adapted from:
@c From: pfalstad@stone.Princeton.EDU (Paul John Falstad)
@c Newsgroups: comp.unix.shell
@c Subject: Re: Beware xargs security holes
@c Date: 16 Oct 90 19:12:06 GMT
@c 
応用する際は，名前に特殊文字を含んでいるため，@code{xargs}ファイルをうま
く処理できない場合も多く，失われるデータもあります．この問題の重要性は，
データの重要性に依存し，それを訂正するためにはできるだけ速く，失ったもの
に気づくかに依存します．しかし，ここに，空白で分離した名前の使用で引き起
こされる究極の例があります．以下のコマンドが，毎日@code{cron}で実行され
る場合，あらゆるユーザはあらゆるファイルを削除可能です．

@example
find / -name '#*' -atime +7 -print | xargs rm
@end example

例えば，以下のようなことが可能でしょう．

@example
eg$ echo > '#
vmunix'
@end example

@noindent
@file{/}を現在のディレクトリとして，@code{xargs}を実行してしまった場合，
そして，@code{cron}は@file{/vmunix}を削除するでしょう．

他のファイルを削除するために，例えば@file{/u/joeuser/.plan}は，以下のよ
うにすることで可能でしょう．

@example
eg$ mkdir '#
'
eg$ cd '#
'
eg$ mkdir u u/joeuser u/joeuser/.plan'
'
eg$ echo > u/joeuser/.plan'
/#foo'
eg$ cd ..
eg$ find . -name '#*' -print | xargs echo
./# ./# /u/joeuser/.plan /#foo
@end example


@node Safe File Name Handling
@subsubsection 安全なファイル名の扱い

ここに，@code{find}が出力したファイル名を，他のプログラムでめちゃくちゃ
にされたり誤解されたりしないで，他のプログラムで使用可能にする方法があり
ます．この方法で生成されたファイル名に，@samp{-0}や@samp{--null}オプショ
ンを，GNU @code{xargs}，GNU @code{tar}，GNU @code{cpio}，または，
@code{perl}に渡すことで，処理することが可能です．

@deffn Action -print0
真です．標準出力の完全なファイル名にヌル文字を続けて出力します．
@end deffn

@deffn Action -fprint0 file
真です．@samp{-print0}ににていますが，@var{file}を@samp{-fprint}のように
書き出します(@pxref{Print File Name})．
@end deffn


@node Limiting Command Size
@subsubsection コマンドサイズの制限

@code{xargs}で，それぞれの実行時にコマンドに渡す引数の数を制御することが
できます．デフォルトで，@code{ARG_MAX} - 2k，または20kまでの小さい方を，
コマンド毎の文字として使用します．それは，制限以内のできるだけ多くの行と
引数を使用します．以下のオプションはこれらの値を変更します．

@table @code
@item --no-run-if-empty
@itemx -r
標準入力が空白でない文字を含まない場合，コマンドを実行しません．デフォル
トで，入力が無い場合でもコマンドは一度実行されます．

@item --max-lines@r{[}=@var{max-lines}@r{]}
@itemx -l@r{[}@var{max-lines}@r{]}
最大@var{max-lines}の空白でない入力行を，コマンドライン毎に使用します．
省略された場合，@var{max-lines}のデフォルトは１です．後置される空白は，
行を数える目的で，入力行を，次の入力行に論理的に連結します．@samp{-x}を
暗黙に指定します．

@item --max-args=@var{max-args}
@itemx -n @var{max-args}
最大@var{max-args}個の引数を，コマンドライン毎に使用します．大きさが
@var{max-args}を超過した場合，それより小さいものが使用されますが，それは
@samp{-x}オプションが与えられていない場合に限り，その場合は@code{xargs}
は終了します．

@item --max-chars=@var{max-chars}
@itemx -s @var{max-chars}
最大@var{max-chars}文字を，コマンドライン毎に使用し，それはコマンドと最
初の引数と引数文字列の最後の終端のヌルを含みます．

@item --max-procs=@var{max-procs}
@itemx -P @var{max-procs}
@var{max-procs}プロセスまで一度に実行します．デフォルトは1です．
@var{max-procs}が0の場合，@code{xargs}は可能な限り多くのプロセスを，一度
に実行します．@samp{-P}とともに，@samp{-n}，@samp{-s}，または@samp{-l}オ
プションを使用して下さい．そうしない場合，コマンドが実行される機会は，1
度しかありません．
@end table


@node Interspersing File Names
@subsubsection ファイル名をばらまく

@code{xargs}は，処理するファイル名を，コマンドに対して与えた引数の間に挿
入可能です．コマンドの大きさを制限するオプションを与えていない場合
(@pxref{Limiting Command Size})，このモードの処理は，@samp{find -exec}と
等価です(@pxref{Single File})．

@table @code
@item --replace@r{[}=@var{replace-str}@r{]}
@itemx -i@r{[}@var{replace-str}@r{]}
最初の引数の@var{replace-str}があるところを，標準入力から読み込まれる名
前に置換します．また，引用符で囲まれていない空白は，引数の最後になりませ
ん．@var{replace-str}が省略された場合，デフォルトは@samp{@{@}}です
(@samp{find -exec}に似ています)．@samp{-x}と@samp{-l 1}を暗黙に指定しま
す．例えば，@file{bills}ディレクトリのそれぞれのファイルをソートし，出力
をファイル名に@file{.sorted}を後置したものに書き出す時，以下のようにする
ことで可能です．

@example
find bills -type f | xargs -iXX sort -o XX.sorted XX
@end example

@noindent
@samp{find -exec}を使用した等価のコマンドは以下のようになります．

@example
find bills -type f -exec sort -o '@{@}.sorted' '@{@}' ';'
@end example
@end table


@node Querying
@subsection 問い合わせ

ユーザに単一のファイル上でコマンドを実行するかどうかを尋ねるため，
@samp{-exec}の代わりに，@code{find}のプライマリ@samp{-ok}が使用可能です．

@deffn Action -ok command ;
@samp{-exec}に似ていますが(@pxref{Single File})，ユーザに(標準入力上で) 
最初に尋ねます．応答が@samp{y}や@samp{Y}で始まらない場合，コマンドを実行
せず，偽を返します．
@end deffn

単一のコマンドで複数のファイルを処理する時，ユーザに問い合わせるため，
@code{xargs}に以下のオプションを与えます．このオプションを使用する時，コ
マンドの呼出毎に処理するファイルの数を制御することが役に立つと分かるでしょ
う．

@table @code
@item --interactive
@itemx -p
ユーザにそれぞれのコマンドラインを実行するかどうかプロンプトを表示し，端
末から1行読み込みます．応答が@samp{y}や@samp{Y}で始まる場合のみコマンド
ラインを実行します．暗黙に@samp{-t}が指定されます．
@end table


@node Adding Tests
@section テストの追加

@code{find}の組み込みテストが調査しない，ファイルの属性の調査をすること
が可能です．こうするために，@code{find}が出力したファイルリストへのフィ
ルターとなるプログラムを実行するため，@code{xargs}を使用してください．
@code{xargs}によって実行されるプログラムが行なう仕事を減らすため，リスト
が少なくなるように，@code{find}の組み込みテストをできるだけ使用して下さ
い．@code{find}の組み込みテストは，他のプログラムが実行するテストより速
く実行されるでしょう．

例えばここに，@file{/usr/local}ディレクトリツリー内のstripされていないバ
イナリの，すべての名前を出力する方法があります．組み込みテストは，通常の
ファイルでないものや，実行可能でないファイルで，@code{file}を実行するこ
とを避けます．

@example
find /usr/local -type f -perm +a=x | xargs file | 
  grep 'not stripped' | cut -d: -f1
@end example

@noindent
@code{cut}プログラムは，@code{file}の出力からファイル名以降のものすべて
を削除します．

@c Idea from Martin Weitzel.
@code{find}の式の中間のどこかで特殊な調査を配置したい場合，調査を実行す
るプログラムを実行するために，@samp{-exec} を使用することが可能です．
@samp{-exec}は，実行されたプログラムの終了ステータスを評価するので，特殊
な属性を検査するプログラム(それは，シェルスクリプトも可能です)を書くこと
と，真(ゼロ)や偽(ゼロ以外)のステータスで終了させることが可能です．そのよ
うな特殊なテストは，新しいプロセスを開始し，組み込みテストが偽と評価する
場合は行なわないので，それを組み込みテストの@emph{後で}配置することは良
い考えです．それぞれのファイルを調査するために，一つ以上の新しいプロセス
を開始することは，多くのファイルの調査を一つのプロセスで開始する
@code{xargs}の使用より遅くなるので，この手法は，@code{xargs}の柔軟性が十
分でない時にのみ使用して下さい．

以下は，引数がstripされているバイナリファイルかどうかを調査する，
@code{unstripped}という名前のシェルスクリプトです．

@example
#!/bin/sh
file $1 | grep 'not stripped' > /dev/null
@end example

このスクリプトは，シェルが実行した最後のプログラムのステータスで終了する
という事実に依存し，この場合@code{grep}になります．@code{grep}は，あらゆ
る一致が見つかる場合は真で終了し，それ以外では偽で終了します．ここに(サー
チパスにあると仮定している)スクリプトを利用している例があります．それは，
ファイル@file{sbins}内のstripされている実行形式と，@file{ubins}内のstrip 
されていない実行形式をリストアップします．

@example
find /usr/local -type f -perm +a=x \
  \( -exec unstripped '@{@}' \; -fprint ubins -o -fprint sbins \)
@end example


@node Common Tasks, Databases, Actions, Top
@chapter 一般的な作業

以下のセクションは，これらのプログラムの能力に利用する際の良い考えを与え，
一般的な現実問題を解説する方法を提示している，拡張された例を含みます．

@menu
* Viewing And Editing::
* Archiving::
* Cleaning Up::
* Strange File Names::
* Fixing Permissions::
* Classifying Files::
@end menu

@node Viewing And Editing
@section 閲覧と編集

特定の基準を満たすファイルのリストを見るために，引数にファイル名を用いて，
単純にファイルビューアープログラムを実行してください．シェルは，バックク
オートで囲まれたコマンドを，その出力に置換するので，コマンド全体はこのよ
うになります．

@example
less `find /usr/include -name '*.h' | xargs grep -l mode_t`
@end example

@noindent
ファイルビューアープログラムの代わりにエディタの名前を与えることで，これ
らのファイルを編集することも可能です．


@node Archiving
@section アーカイブ

@code{find}で生成したファイルリストを，ファイルアーカイブプログラムに渡
すことも可能です．GNU @code{tar}と@code{cpio}は，どちらも標準入力からファ
イル名のリストを読み込むことが可能です---ヌル(安全な方法)，または，空白
(簡単だが危険なデフォルトの方法)のどちらかで分離します．ヌルで名前を分離
する方法を使用するため，@samp{--null}オプションを与えてください．ファイ
ルアーカイブをファイルに保存したり，テープに書き出したり，ネットワーク越
しの他のマシンに展開したりすることも可能です。

ファイルをアーカイブする一般的な@code{find}の使用方法は，ディレクトリツ
リー内のファイルリストを@code{cpio}に送る方法です．所有者がディレクトリ
に書き込み許可が無い場合は@samp{-depth}を使用し，(その場合，)ディレクト
リの許可はその内容の後でリストアされるため，その内容をアーカイブからリス
トアすることが可能です．こうするために@code{cpio}使用した例がここにあり
ます．特定のファイルのみアーカイブするために，より複雑な@code{find}の式
を使用することも可能です．

@example
find . -depth -print0 |
  cpio --create --null --format=crc --file=/dev/nrst0
@end example

以下のコマンドを使用して，そのアーカイブをリストアすることが可能です．

@example
cpio --extract --null --make-dir --unconditional \
  --preserve --file=/dev/nrst0
@end example

同じことを@code{tar}を使用して行なうコマンドは以下のようになります．

@example
find . -depth -print0 |
  tar --create --null --files-from=- --file=/dev/nrst0

tar --extract --null --preserve-perm --same-owner \
  --file=/dev/nrst0
@end example

@c Idea from Rick Sladkey.
一つのマシンから他のマシンに，ディレクトリをコピーする例は以下のようにな
ります．

@example
find . -depth -print0 | cpio -0o -Hnewc |
  rsh @var{other-machine} "cd `pwd` && cpio -i0dum"
@end example


@node Cleaning Up
@section クリーンアップ

@c Idea from Jim Meyering.
このセクションでは，さまざまな状況で，不要なファイルを削除する例を提供し
ます．マージの要求で更新された時に作成されるCVSバックアップファイルを
削除するコマンドは以下のようになります．

@example
find . -name '.#*' -print0 | xargs -0r rm -f
@end example

@c Idea from Franc,ois Pinard.
@file{/tmp}内のゴミファイルをきれいにするためにこのコマンドを実行するこ
とが可能です．ログアウトする時にシェルがそれを実行するよう，(使用してい
るシェルに依存しますが，@file{.bash_logout}，@file{.logout}，または
@file{.zlogout})ファイルに書き出すことも可能です．

@example
find /tmp -user $LOGNAME -type f -print0 | xargs -0 -r rm -f
@end example

@c Idea from Noah Friedman.
古いEmacsのバックアップファイルと自動保存ファイルを削除するために，以下
のようなコマンドが使用可能です．VMメーラーのようなEmacsパッケージは，
@file{#reply to David J. MacKenzie<1>#}のようにスペースを含む一時ファイ
ルを作成することが多いので，ヌルで終端されているファイル名を使用する方法
は，この場合には特に重要です．

@example
find ~ \( -name '*~' -o -name '#*#' \) -print0 |
  xargs --no-run-if-empty --null rm -vf
@end example

@file{/tmp}から古いファイルを削除するため，通常は@code{cron}から実行しま
す．

@c Idea from Kaveh Ghazi.
@example
find /tmp /var/tmp -not -type d -mtime +3 -print0 |
  xargs --null --no-run-if-empty rm -f

find /tmp /var/tmp -depth -mindepth 1 -type d -empty -print0 |
  xargs --null --no-run-if-empty rmdir
@end example

上記の2番目の@code{find}コマンドは，空のディレクトリの最初の深度をきれい
にするため，@samp{-depth}を使用し，それで親が空になり，削除も可能になる
ことを期待しています．全体が空になった場合，@file{/tmp}自身を削除しない
ように，@samp{-mindepth}を使用します．


@node Strange File Names
@section 奇妙なファイル名

@c Idea from:
@c From: tmatimar@isgtec.com (Ted Timar)
@c Newsgroups: comp.unix.questions,comp.unix.shell,comp.answers,news.answers
@c Subject: Unix - Frequently Asked Questions (2/7) [Frequent posting]
@c Subject: How do I remove a file with funny characters in the filename ?
@c Date: Thu Mar 18 17:16:55 EST 1993
@code{find}は，名前に奇妙な文字を含むファイルを，削除したり名前を変更し
たりする手助けにもなります．スペース，タブ，制御文字，またはハイビットセッ
トを用いた文字のような，もの(文字)を含む名前のファイルに邪魔される時もあ
ります．そのようなファイルを削除する最も簡単な方法は，以下のようになりま
す．

@example
rm -i @var{some*pattern*that*matches*the*problem*file}
@end example

@code{rm}は，与えられたパターンに一致するそれぞれのファイルを削除するか
どうか尋ねます．古いシェルを使用している場合で，ファイル名にハイビットセッ
トを用いた文字を含む場合には，この方法は動作しません．シェルはそれを削除
します．より信頼できる方法は，以下のようになります．

@example
find . -maxdepth 1 @var{tests} -ok rm '@{@}' \;
@end example

@noindent
ここでの@var{tests}は，ファイルをユニークに識別します．@samp{-maxdepth
1}オプションは，@code{find}があらゆるサブディレクトリのファイルを検索す
ることで，時間を無駄にすることを妨げます．サブディレクトリが無い場合は省
略してもかまいません．問題のファイルをユニークに識別する良い方法は，その
inodeナンバーを知ることです．以下のように使用します．

@example
ls -i
@end example

制御文字を名前に含んでいるファイルを持っていて，そのinodeナンバーが12345 
だと分かったと仮定します．以下のコマンドは，それを削除するかどうか，プロ
ンプトを表示します．

@example
find . -maxdepth 1 -inum 12345 -ok rm -f '@{@}' \;
@end example

ファイル名が奇妙な文字列を含んでいて，出力時にスクリーンが駄目になるため，
尋ねられたくない場合は，@samp{-ok}の代わりに@samp{-exec}を使用して下さい．

そうではなく，ファイルの名前を変更したい場合，@code{rm}の代わりに
@code{mv}を使用することが可能です．

@example
find . -maxdepth 1 -inum 12345 -ok mv '@{@}' @var{new-file-name} \;
@end example


@node Fixing Permissions
@section 許可の修正

特定のディレクトリツリーのディレクトリに，誰でも書き込めることを確実にし
たいと仮定します．ユーザまたはグループ(または両方)の許可が無く，それらの
許可を修正する方法がここにあります．

@example
find . -type d -not -perm -ug=w | xargs chmod ug+w
@end example

@noindent
ディレクトリが誰でも書き込め@emph{ない}ことを確実にしたい場合，反対の処
理も可能でしょう．


@node Classifying Files
@section ファイルの分類

@c Idea from:
@c From: martin@mwtech.UUCP (Martin Weitzel)
@c Newsgroups: comp.unix.wizards,comp.unix.questions
@c Subject: Advanced usage of 'find' (Re: Unix security automating script)
@c Date: 22 Mar 90 15:05:19 GMT
ファイルの集合を異なる基準でいくつかのグループに分類したい場合，ファイル
上で複数の独立したテストを実行するため，カンマオペレータを使用することが
可能です．例えば以下のようにします．

@example
find / -type d \( -perm -o=w -fprint allwrite , \
  -perm -o=x -fprint allexec \)

echo "Directories that can be written to by everyone:"
cat allwrite
echo ""
echo "Directories with search permissions for everyone:"
cat allexec
@end example

@code{find}は，ディレクトリツリー全体を1度走査する必要があるだけです(そ
れはその作業で最も時間がかかる部分の一つです)．


@node Databases, File Permissions, Common Tasks, Top
@chapter ファイル名のデータベース

@code{locate}で使用されるファイル名のデータベースには，データベースが最
後に更新された時の，特定のディレクトリツリー内のファイルのリストが含まれ
ています．データベースのデフォルトファイル名は，@code{locate}と
@code{updatedb}がコンフィグレーションされインストールされた時に決定され
ます．データベースが更新される頻度と，項目に含めるディレクトリは，
@code{updatedb}が実行される頻度と，その引数に依存します．

@menu
* Database Locations::
* Database Formats::
@end menu

@node Database Locations
@section データベースの位置

複数のファイル名のデータベースの存在が可能です．ユーザは，@code{locate} 
が検索を行なうデータベースを，環境変数やコマンドラインオプションを使用し
て選択可能です．システム管理者は，デフォルトのデータベースのファイル名，
データベースを更新する頻度，そして，項目に含めるディレクトリを選択するこ
とが可能です．ファイル名のデータベースは，@code{updatedb}プログラムで，
通常夜に実行され更新されます．

ネットワーク環境では，ファイルシステムの項目を含めながら，それぞれのルー
トファイルシステムでデータベースを構築することに意味があります．
@code{updatedb}は，ネットワークのスラッシングを避けるため，ファイルシス
テムがローカルディスクにあるファイルサーバの，それぞれのファイルシステム
で実行されます．@code{updatedb}に，それぞれのデータベースが含んでいる項
目のディレクトリを選択させるオプションは以下のとおりです．

@table @code
@item --localpaths='@var{path}@dots{}'
データベースに書き込むネットワーク以外のディレクトリです．デフォルトは
@file{/}です．

@item --netpaths='@var{path}@dots{}'
データベースに書き込むネットワークディレクトリ(NFS，AFS，RFS，等々)です．
デフォルトはありません．

@item --prunepaths='@var{path}@dots{}'
データベースに書き込まないディレクトリで，それ以外は書き込まれます．デフォ
ルトは，@file{/tmp /usr/tmp /var/tmp /afs}です．

@item --output=@var{dbfile}
構築されるデータベースファイルです．デフォルトはシステムに依存しますが，
通常は，@file{/usr/local/var/locatedb}です．

@item --netuser=@var{user}
ネットワークディレクトリを検索するユーザで，@code{su}を使用します．デフォ
ルトは@code{daemon}です．
@end table


@node Database Formats
@section データベースの書式

ファイル名のデータベースには，データベースが最後に更新された時の，特定の
ディレクトリツリーのファイルのリストを含まれます．ファイル名のデータベー
スの書式変更は，異なるバイト順序を用いるマシンでも，データベースの共有が
可能となるように，GNU @code{locate}バージョン4.0から開始されました．新し
いGNU @code{locate}は，新旧両方のデータベースの書式を読み込むことが可能
です．しかし，古いバージョンの@code{locate}と@code{find}では，新しい書式
のデータベースを与えられた場合，間違った結果となります．

@menu
* New Database Format::
* Sample Database::
* Old Database Format::
@end menu

@node New Database Format
@subsection 新しいデータベースの書式

@code{updatedb}は，4の要素を5にする@footnote{訳注：原文はby a factor of
4 to 5}ことでデータベースの大きさが小さくなるように，ファイル名のリスト
を@dfn{前部圧縮}するために@code{frcode}を実行します．前部圧縮(増分符合化
としても知られている)は以下のように動作します．

データベースの項目は，(ユーザの利便性のため，大文字小文字を識別しないで) 
ソートされているリストです．リストはソートされているので，それぞれの項目
は，前の項目と同じ接頭辞(最初の文字列)を共有することがよくあります．それ
ぞれのデータベース項目はオフセットバイトの差分の数で始まっていて，それは
前の項目の更に前のものが使用している数以上を使用している，前の項目に前置
される接頭辞の追加の文字数です@footnote{訳注：この文日本語になっていませ
ん．原文は，Each database entry begins with an offset-differential count
byte, which is the additional number of characters of prefix of the
preceding entry to use beyond the number that the preceding entry is
using of its predecessor.}．(数は負になることもあるはずです．)それ以降の
数は，ヌルで終端されているASCII文字の残りです---共有している接尾辞以降の
名前の部分です．

オフセット差分数がバイト(+/-127)で保存できるものより大きい場合，バイトの
値が0x80になり，それ以下の2バイトがその数値になっていて，それはハイバイ
トを最初(ネットワークバイトの順序)にしたものを用います．

すべてのデータベースは，@file{LOCATE02}と呼ばれるダミーの項目で始まって
いて，それは，データベースファイルの書式が正しいことを確認するために，
@code{locate}が調査するものです．検索時にはその項目は無視されます．

最初の(ダミー)項目を，最初のデータベース以外からすべて切り取った場合でも，
データベースをお互いに連結させることは不可能です．これは，2番目とそれ以
降の最初の項目にあるオフセット差分数が間違ってしまうためです．


@node Sample Database
@subsection サンプルデータベース

@code{frcode}へのサンプル入力です．
@c with nulls changed to newlines:

@example
/usr/src
/usr/src/cmd/aardvark.c
/usr/src/cmd/armadillo.c
/usr/tmp/zoo
@end example

共有しているために前置される，最も長い接頭辞の長さは以下のようになります．

@example
0 /usr/src
8 /cmd/aardvark.c
14 rmadillo.c
5 tmp/zoo
@end example

最後のヌルを改行に変更し，バイトを出力可能文字に変更した場合の，
@code{frcode}からの出力は以下のようになります．

@example
0 LOCATE02
0 /usr/src
8 /cmd/aardvark.c
6 rmadillo.c
-9 tmp/zoo
@end example

(6 = 14 - 8, and -9 = 5 - 14)

(6 = 14 - 8，そして -9 = 5 - 14)


@node Old Database Format
@subsection 古いデータベースの書式

古いデータベースの書式は，Unixの@code{locate}と@code{find}プログラム，そ
して早期のGNUがリリースしたもので使用されています．@code{updatedb}は，
@samp{--old-format}オプションが与えられた場合，この書式を生成します．

@code{updatedb}は，古い書式のデータベースを生成するために，@code{bigram} 
と@code{code}と呼ばれるプログラムを実行します．古い書式は，新しいものと
以下の方式で異なります．オフセット差分数バイトで始まりヌルで終るそれぞれ
の項目の代わりに，-14から14までのオフセット差分数を示している，0から28の
値になります．それ以上の大きなオフセット差分数を示すバイト値は，0x1e
(30)で0x80ではありません．大きな数は，ホストのバイト順でソートされ，それ
はネットワークバイトの順序である必要はなく，ホストのワード整数の大きさで，
それは通常4バイトです．その値が14より小さいものは表示されません．データ
ベースの行には終端バイトがありません．次の行の先頭は，30より小さい値を持
つバイトで示されます．

更に，最初のダミー項目で始まる代わりに，古いデータベース書式は，ファイル
リストで最も一般的な128のbigramを含んでいる，256バイトの表で始まります．
bigramは調整されたバイトの組となっています．ハイビットセットを持つデータ
ベースのバイトは，(ハイビットがクリアされている)bigram表内部の索引です．
bigramとオフセット差分数の符合化は，これらのデータベースを，新しい書式よ
り20から25%まで小さくしますが，8ビットクリーンにはなりません．特殊コード
に使用される範囲にあるファイル名のあらゆるバイトは，データベース内では疑
問符に置換され，それは，単一文字に一致するシェルのワイルドカードには一致
しません．


@node File Permissions, Reference, Databases, Top
@chapter ファイルの許可

@include perm-ja.texi


@node Reference, Primary Index, File Permissions, Top
@chapter リファレンス

以下は，このマニュアルで示してきたプログラムに対する，コマンドラインの構
文の概要です．

@menu
* Invoking find::
* Invoking locate::
* Invoking updatedb::
* Invoking xargs::
@end menu

@node Invoking find, Invoking locate, , Reference
@section @code{find}の呼出

@example
find @r{[}@var{file}@dots{}@r{]} @r{[}@var{expression}@r{]}
@end example

@code{find}は，それぞれのファイル名@var{file}をルートとするディレクトリ
ツリーを，そのツリーで見つかったそれぞれのファイル上で@var{expression}を
評価しながら検索します．

@code{find}は，最初の引数は式の始まりとなる@samp{-}，@samp{(}, @samp{)}，
@samp{,}，または@samp{!}で始まると考えます．それ以前のあらゆる引数は検索
パスで，それ以降のあらゆる引数は式の残りとみなします．パスが与えられてい
ない場合，現在のディレクトリが使用されます．式が与えられていない場合，式
@samp{-print}が使用されます．

@code{find}は，すべてのファイルが正しく処理された場合は0のステータスで，
エラーが発生した場合は0より大きなステータスで終了します．

式に含めることが可能なすべてのテスト，アクション，そしてオプションの概要
は，@xref{Primary Index}.

@code{find}は，管理上で使用するため，2つのオプションも認識します．

@table @code
@item --help
コマンドライン引数の書式の概要を出力し，終了します．
@item --version
@code{find}のバージョンナンバーを出力し，終了します．
@end table

@node Invoking locate, Invoking updatedb, Invoking find, Reference
@section @code{locate}の呼出

@example
locate @r{[}@var{option}@dots{}@r{]} @var{pattern}@dots{}
@end example

@table @code
@item --database=@var{path}
@itemx -d @var{path}
デフォルトのファイル名のデータベースを検索する代わりに，@var{path}にある
ファイル名のデータベースを検索し，それはコロンで分離されたデータベースファ
イル名のリストになります．環境変数@code{LOCATE_PATH}を検索するデータベー
スファイルに設定する方法も使用可能です．両方使用されている場合，オプショ
ンは環境変数に優先します．

@item --help
@code{locate}へのオプションの概要を出力し，終了します．

@item --version
@code{locate}のバージョンナンバーを出力し，終了します．

@end table

@node Invoking updatedb, Invoking xargs, Invoking locate, Reference
@section @code{updatedb}の呼出

@example
updatedb @r{[}@var{option}@dots{}@r{]}
@end example

@table @code
@item --localpaths='@var{path}@dots{}'
データベースに書き込むネットワーク以外のディレクトリです．デフォルトは
@file{/}です．

@item --netpaths='@var{path}@dots{}'
データベースに書き込むネットワーク(NFS，AFS，RFS，等々．)のディレクトリ
です．デフォルトはありません．

@item --prunepaths='@var{path}@dots{}'
データベースに書き込まないディレクトリで，それ以外は書き込みます．デフォ
ルトは，@file{/tmp /usr/tmp /var/tmp /afs}です．

@item --output=@var{dbfile}
構築されるデータベースファイルです．デフォルトはシステムに依存しますが，
通常は@file{/usr/local/var/locatedb}です．

@item --netuser=@var{user}
@code{su}(1)を使用しながら，ネットワークディレクトリを検索するユーザです．
デフォルトは@code{daemon}です．
@end table

@node Invoking xargs, ,  Invoking updatedb, Reference
@section @code{xargs}の呼出

@example
xargs @r{[}@var{option}@dots{}@r{]} @r{[}@var{command} @r{[}@var{initial-arguments}@r{]}@r{]}
@end example

@code{xargs}は，以下のステータスで終了します．

@table @asis
@item 0
成功した場合．
@item 123
1-125のステータスで終了されたコマンドの呼出があった場合．
@item 124
コマンドが255のステータスで終了した場合．
@item 125
コマンドがシグナルでキルされた場合．
@item 126
コマンドが実行不可能な場合．
@item 127
コマンドが見つからない場合．
@item 1
その他のエラーが発生した場合．
@end table

@table @code
@item --null
@itemx -0，
入力ファイル名を空白の代わりにヌル文字で終端し，引用符とバックスラッシュ
は特別扱いされません(すべての文字は，文字通りに扱われます)．他の引数とし
て扱われるような，ファイル文字列の終端@footnote{訳注：ファイル名の終端を
示す文字のこと．原文は the end of file string．}を使用不可能にします．

@item --eof@r{[}=@var{eof-str}@r{]}
@itemx -e@r{[}@var{eof-str}@r{]}
ファイル文字列の終端を@var{eof-str}に設定します．ファイル文字列の終端が，
入力行に現れた場合，残りの入力は無視されます．@var{eof-str}が省略された
場合，ファイル文字列の終端はありません．このオプションが与えられていない
場合，ファイル文字列の終端はデフォルトで@samp{_}になります．

@item --help
@code{xargs}のオプションの概要を出力して，終了します．

@item --replace@r{[}=@var{replace-str}@r{]}
@itemx -i@r{[}@var{replace-str}@r{]}
最初から存在する引数にある@var{replace-str}を，標準入力から読み込まれた
名前に置換します．また，引用符で囲まれていない空白は，引数の終りになりま
せん．@var{replace-str}が省略されている場合，デフォルトは@samp{@{@}}にな
ります(@samp{find -exec}に似ています)．@samp{-x}と@samp{-l 1}を暗黙に指
定します．

@item --max-lines@r{[}=@var{max-lines}@r{]}
@itemx -l@r{[}@var{max-lines}@r{]}
最大@var{max-lines}の空白でない入力行を，コマンドライン毎に使用します．
後置されている空白は，入力行を論理的に次の行に続かせ，それは行を数える目
的のためです．@samp{-x}を暗黙に指定します．

@item --max-args=@var{max-args}
@itemx -n @var{max-args}
最大@var{max-args}の引数を，コマンドライン毎に使用します．@var{max-args} 
より引数が少ない時は，サイズ(@samp{-s}オプションを参照して下さい)を越て
いても，@samp{-x}オプションが与えられていない場合はそれが使用され，それ
以外では@code{xargs}は終了します．

@item --interactive
@itemx -p
それぞれのコマンドラインを実行するかどうか，ユーザにプロンプトを表示し，
端末から一行読み込みます．応答が@samp{y}や@samp{Y}で始まっている場合のみ，
コマンドラインを実行します．@samp{-t}を暗黙に指定します．

@item --no-run-if-empty
@itemx -r
標準入力が全く空行を含まない場合，コマンドを実行しません．デフォルトで，
コマンドは入力が無い場合でも一度実行されます．

@item --max-chars=@var{max-chars}
@itemx -s @var{max-chars}
コマンドと最初からある引数と引数文字列の最後の終端のヌルを含め，最大
@var{max-chars}文字をコマンドライン毎に使用します．

@item --verbose
@itemx -t
コマンドラインを実行前に標準エラー出力に出力します．

@item --version
@code{xargs}のバージョンナンバーを出力し，終了します．

@item --exit
@itemx -x
サイズ(@var{-s}オプションを参照して下さい)を越えた場合，終了します．

@item --max-procs=@var{max-procs}
@itemx -P @var{max-procs}
一度に@var{max-procs}プロセスまで実行します．デフォルトは1です．
@var{max-procs}が0の場合，@code{xargs}は一度に実行可能な最大数のプロセス
を実行します．
@end table


@node Primary Index, , Reference, Top
@unnumbered @code{find}のプライマリの索引

これは，ファイルを検索するために@code{find}の式を作り上げる，(テスト，ア
クション，そしてオプション) すべてのプライマリのリストです．式の詳細は，
@xref{find Expressions}.

@printindex fn

@contents
@bye
