Da info cpio
página:
Se você quiser arquivar uma árvore de diretórios inteira, o comando find pode fornecer a lista de arquivos para cpio:
% find . -print -depth | cpio -ov > tree.cpio
A opção '-depth' força o 'find' a imprimir as entradas em um diretório antes de imprimir o próprio diretório. Isso limita os efeitos das permissões de diretório restritivas imprimindo as entradas de diretório em um diretório antes do próprio nome do diretório.
O que significa esta última parte? Como a impressão das entradas de diretório em um diretório antes do próprio nome do diretório limita os efeitos das permissões de diretório restritivas?
A maioria das
cpio
implementações são burras e não gerenciam permissões de diretório ao descompactar arquivos.Se um diretório não tiver acesso de gravação e o arquivo cpio estiver na ordem usual de
find
, o diretório será o primeiro nocpio
arquivo e descompactado primeiro docpio
arquivo. Quando um diretório "somente leitura" foi descompactado e recebeu suas permissões, ele não tem permissão para colocar arquivos quando mais tarde o conteúdo do diretório for visto no arquivo e será descompactado.uma solução para este
cpio
problema é criar arquivos onde o conteúdo de um diretório vem primeiro e o diretório relacionado vem depois do conteúdo. Isso fazcpio
com que crie o diretório ausente (se chamado com-d
para criar diretórios ausentes) com permissões padrão, extraia os arquivos dentro do arquivo e, posteriormente, quando o diretório for visto no arquivo, defina as permissões como "somente leitura".outra solução é extrair o arquivo com uma
cpio
implementação burra comoroot
, já queroot
é permitido criar arquivos mesmo dentro de um diretório readonly.a terceira solução é usar uma
cpio
implementação moderna como acpio
emulação dentro dostar
.star
lembra as permissões de diretório do arquivo, mas cria primeiro o diretório com permissões de gravação intermediárias. As permissões de diretório real lembradas são definidas com atraso porstar
, após os arquivos no arquivo serem extraídos para o diretório com permissão de gravação intermediária.A versão OSX (e, portanto, BSD) da
find
página man indica o seguinte:A última frase explica o porquê, um pouco melhor???
O objetivo do
-depth
switch é forçarfind
a ir fundo em todos os diretórios que encontrar até atingir os "nós de folha", que serão impressos.NOTA: O
-depth
subdiretório força a ser processado antes de seus pais.Ao utilizar o
-depth
switch, você garante quefind
não será acionado ao transportar diretórios pai para ocpio
comando que pode ser excessivamente restritivo e não permitir que diretórios de nível inferior sejam criados devido ao seu ID de usuário não ter permissão para leitura / execução completa privilégios.Referências