UNIX cria um diretório que parece ter o conteúdo de outros diretórios

3

Se eu tiver dois diretórios, aeb podem alguém sugerir um método conveniente de criar um diretório que pareça ter o conteúdo de aeb sem copiar os arquivos? No momento, o que tenho usado é ln -s * para fazer uma carga de links sym e, em seguida, excluir os links sym quando terminar. Eu preferiria que, se o conteúdo dos sub-diretórios parecesse ser mesclado, e gerenciar isso com o método sym link talvez precise de alguns ajustes.

Tudo bem se o diretório resultante for lido somente com o aplicativo.

    
por camelccc 28.02.2013 / 13:29

1 resposta

4

Você pode efetivamente mesclar a diretórios com UnionFS sobrepondo os dois diretórios (chamados de branches neste contexto) em um único ponto de montagem.

Existem várias implementações do UnionFS; UnionFsFuse é um dos mais simples, já que é um aplicativo (em vez de um patch de kernel) .

O site contém um link para o arquivo. Compilar o código-fonte deve ser direto na maioria das distros.

No Ubuntu, por exemplo, basta instalar o pacote unionfs-fuse executando o seguinte comando:

sudo apt-get install unionfs-fuse

Uma vez instalado, você pode continuar a sobrepor os diretórios. Existem várias opções. Vou explicar brevemente os mais básicos:

  • O comando

    unionfs-fuse foo:bar baz
    

    sobrepõe o conteúdo dos diretórios foo e bar no diretório baz . 1

    Esta sobreposição será somente leitura; qualquer tentativa de criar ou modificar um arquivo em baz resultará em um erro Permissão negada. . No entanto, você ainda poderá criar e modificar os arquivos dentro de foo e bar .

    As colisões são tratadas de forma fixa: Se um arquivo existir em um ramo superior ( foo ), ele terá preferência sobre um arquivo com o mesmo nome em um ramo inferior (barra ).

  • O comando

    union-fuse foo=RW:bar=RO baz
    

    torna foo gravável e bar (somente leitura). Modificar arquivos de foo será possível, mas não será possível modificar arquivos de bar . Todos os arquivos recém-criados em baz aparecerão em foo .

  • O comando

    union-fuse -ocow foo=RW:bar=RO baz
    

    é semelhante ao último comando. A opção copy on write ( cow ) tem o efeito que tentar modificar um arquivo de bar dentro de baz resultará em uma cópia modificada do arquivo em foo (ou qualquer outro ramo gravável de nível superior).

  • Com o comando

    union-fuse foo=RW:bar=RW baz
    

    tudo pode ser modificado. Novos arquivos serão criados no ramo superior ( foo ).

  • O comando

    union-fuse foo=RO:bar=RW baz
    

    permite modificar os arquivos de bar dentro de baz , mas nenhum novo arquivo pode ser criado.

  • O comando

    sudo umount baz
    

    desfaz a montagem da união.

Veja também: man unionfs-fuse

1 baz deve existir antes que este comando seja executado. Isso se aplica a todos os outros comandos também.

    
por 28.02.2013 / 18:36

Tags