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
最新の実装を使用することです。アーカイブのディレクトリ権限を覚えていますが、最初に中間書き込み権限を持つディレクトリを作成してください。中間書き込み権限を持つディレクトリにアーカイブからファイルを抽出した後、記憶された実際のディレクトリ権限設定が遅れました。cpio
star
star
star
答え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
できます。find
cpio
- -深さオプション(実際には常に真の基準)は、出力を次のように強制します。深さ優先- つまり、最初にファイルがあり、次にそのファイルを含むディレクトリがあります。これは、ディレクトリに制限的な権限がある場合に役立ちます。最初にディレクトリを復元すると、ファイルの回復を防ぐことができます(いかなる場合でもディレクトリのタイムスタンプの変更)。通常、findは最初にディレクトリを返し、次にそのディレクトリ内のすべてのファイルを返します。