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’で調和させるためで
す.