次: , 前: Safe File Name Handling, 上: Multiple Files


3.3.2.3 ファイル名の通常ではない文字

これまで議論したように,findとその他のプログラムでのファイル名の 処理方法について,頻繁に注意する必要があります.findの出力を他の プログラムに渡さず端末に表示させる場合でも,問題になることがあります. 例えば,特定の文字の並びには端末のファンクションキーを再構成するものも あります.findのセキュリティの問題に関する議論は, See Security Considerations.

通常ではない文字は,以下の記述のように,さまざまなアクションとは別に処 理されます.

`-print0'
`-fprint0'
常に正確なファイル名を出力し,出力が端末の場合でも変更されません.
`-ok'
`-okdir'
常に正確なファイル名を出力し,変更されません.これは将来のリリースで, おそらく変更されるでしょう.
`-ls'
`-fls'
通常ではない文字は常にエスケープされます.空白,バックスラッシュ,そし て二重引用符文字はC形式のエスケープ(例えば,`\f',`\"')で出力 されます.それ以外の通常ではない文字は,八進数を用いて出力されます.そ れ以外の印字可能文字(`-ls'と`-fls'では,八進数の041と0176の間 の文字)は,そのまま出力されます.
`-printf'
`-fprintf'
出力が端末でない場合,そのまま出力されます.それ以外の場合,結果は使用 されている指示語に依存します.
%D, %F, %H, %Y, %y
これらは,ファイルの所有者の制御下には無い値に展開され,そのまま出力さ れます.
%a, %b, %c, %d, %g, %G, %i, %k, %m, %M, %n, %s, %t, %u, %U
これらは,ファイルの所有者の制御下にはある値になりますが,端末に不明瞭 はデータを送るために使用されることが無いので,そのまま出力されます.
%f, %h, %l, %p, %P
これらの指示語の出力は,出力が端末の場合,引用符で囲まれます.

この引用符で囲む手法は,GNU lsと同じ方法で実行されます. `-ls'と`-fls'で使用される引用符で囲むメカニズムとは異なります. findの出力で使用する書式を決定することが可能な場合,通常は改行で はなく`\0'を終端文字として使用するほうが良く,それは,ファイル名に は空白や改行文字を含めることができるからです.


`-print'
`-fprint'
引用符での囲み方は,`-printf'と`-fprintf'の`%p'指示語と 同じ方法で処理されます.スクリプト内やマッチしたファイルが不明瞭な名前 を持つ状況でfindを使用している場合,`-print'の代わりに `-print0'の使用を検討すべきでしょう.

locateプログラムは,findの`-print'アクションと同じ方 法で,ファイル名の通常ではない文字を引用符で囲んだり,エスケープしたり します.

これまで記述してきた動作はまもなく変更される可能性があり,それは,印字 不能な文字列の処理を,`-ls',`-fls',`-print', `-fprint',`-printf',そして`-fprintf'で調和させるためで す.