Next: , Previous: Safe File Name Handling, Up: 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’で調和させるためで す.