「cpio」で「find -length」を使用する理由

「cpio」で「find -length」を使用する理由

info cpioページから:

ディレクトリツリー全体をアーカイブしたい場合、findコマンドはcpioにファイルリストを提供できます。

 % find . -print -depth | cpio -ov > tree.cpio

- 深さオプションは、Find がディレクトリ自体を印刷する前にディレクトリ内のエントリを印刷するように強制します。これにより、ディレクトリ名自体の前にディレクトリエントリを印刷して、制限的なディレクトリ権限の影響を制限します。

最後の部分はどういう意味ですか?ディレクトリ名自体の前にディレクトリエントリを印刷して、制限的なディレクトリ権限の影響を制限する方法は?

答え1

ほとんどのcpio実装は、愚かでアーカイブを解凍するときにディレクトリ権限を管理しません。

ディレクトリに書き込みアクセス権がなく、cpioアーカイブが通常の順序である場合、findディレクトリはcpioアーカイブの最初の場所にあり、cpio最初にアーカイブから抽出されます。これらの「読み取り専用」ディレクトリを解凍して権限を付与すると、ディレクトリの内容が後でアーカイブに表示され、解凍時にそのディレクトリにファイルを配置する権限がありません。

  • このcpio問題に対する 1 つの解決策は、ディレクトリの内容を最初に含めて、関連ディレクトリをコンテンツの後ろに含むアーカイブを作成することです。これにより、cpio不足しているディレクトリがデフォルトの権限で作成され(不足して-dいるディレクトリの作成が呼び出された場合)、その中のファイルがアーカイブから抽出され、ディレクトリがアーカイブに表示されると、権限は「読み取り専用」です。

  • cpio別の解決策は、読み取り専用ディレクトリでもファイルを生成できるため、愚かなroot実装を使用してアーカイブを抽出することです。root

  • 3番目の解決策は、社内エミュレーションなどのcpio最新の実装を使用することです。アーカイブのディレクトリ権限を覚えていますが、最初に中間書き込み権限を持つディレクトリを作成してください。中間書き込み権限を持つディレクトリにアーカイブからファイルを抽出した後、記憶された実際のディレクトリ権限設定が遅れました。cpiostarstarstar

答え2

OSX(およびBSD)バージョンのマニュアルページには、find次の内容が記載されています。

 -d      Cause find to perform a depth-first traversal, i.e., directories 
         are visited in post-order and all entries in a directory will 
         be acted on before the directory itself.  By default, find visits 
         directories in pre-order, i.e., before their contents.  Note, 
         the default is not a breadth-first traversal.

         This option is equivalent to the -depth primary of IEEE Std 
         1003.1-2001 (``POSIX.1'').  The -d option can be useful when find 
         is used with cpio(1) to process files that are contained in 
         directories with unusual permissions.  It ensures that you have 
         write permission while you are placing files in a directory, 
         then sets the directory's permissions as the last thing.

最後の文でその理由を説明しています。 ? ?

スイッチの目的は、「リーフノード」に達するまで見つかったすべてのディレクトリを-depth強制的にfindドリルダウンしてから印刷することです。

メモ:-depthディレクトリが親ディレクトリの前に処理されるようにします。

このスイッチを使用すると、完全な読み取り/実行権限を許可しないユーザーIDのために制限が厳しくなり、下位レベルのディレクトリ作成を許可しないコマンドに親ディレクトリを渡すときに問題が発生しないようにすることが-depthできます。findcpio

  • -深さオプション(実際には常に真の基準)は、出力を次のように強制します。深さ優先- つまり、最初にファイルがあり、次にそのファイルを含むディレクトリがあります。これは、ディレクトリに制限的な権限がある場合に役立ちます。最初にディレクトリを復元すると、ファイルの回復を防ぐことができます(いかなる場合でもディレクトリのタイムスタンプの変更)。通常、findは最初にディレクトリを返し、次にそのディレクトリ内のすべてのファイルを返します。

引用する

関連情報