Como posso criar uma “visão” do sistema de arquivos de uma pasta que exclui determinados arquivos?

7

Eu quero ter um caminho no sistema de arquivos que mostre todo o conteúdo de algum outro caminho, excluindo alguns arquivos certos de minha escolha. Por exemplo, se o seguinte já existir,

original-path
├── file1
├── file2
├── file3
├── file4
├── folder1
│   ├── file1
│   └── file2
└── folder2
    ├── file1
    └── file2

Eu quero excluir /file1 , /folder1/file1 e /folder2 de um novo caminho que, de outra forma, aponta para os mesmos dados:

new-path
├── file2
├── file3
├── file4
└── folder1
    └── file2

Como posso conseguir isso? Algum tipo de montagem de bind, sistema de arquivos FUSE ou esquema de links inteligente?

    
por ændrük 24.05.2011 / 16:44

3 respostas

2

filtrado por rofs , um sistema de arquivos FUSE derivado de Sistema de arquivos somente leitura , pode excluir arquivos usando expressões regulares:

$ cat rofs-filtered.rc 
^/file1$
^/folder1/file1$
^/folder2$
$ rofs-filtered -c /home/ak/sandbox/rofs-filtered.rc /home/ak/sandbox/original-path /home/ak/sandbox/new-path
$ tree {original,new}-path
original-path
├── file1
├── file2
├── file3
├── file4
├── folder1
│   ├── file1
│   └── file2
└── folder2
    ├── file1
    └── file2
new-path
├── file2
├── file3
├── file4
└── folder1
    └── file2

O rofs-filter não está disponível nos repositórios do Ubuntu, mas eu iniciei uma solicitação para que seja adicionado a>.

    
por ændrük 24.05.2011 / 21:34
2

Eu acho que você já está na página certa. Você mencionou as duas coisas que eu teria sugerido.

O FUSE é aparentemente simples de ser preso. Eu tive uma pergunta semelhante a este um tempo atrás e uma das respostas mencionou o FUSE. Eu encontrei uma opção mais simples (que explicarei em um segundo), mas se isso não for desejável, vale a pena investigar o FUSE.

Meu problema é que eu tenho um diretório de entrada onde os clientes despejam todo tipo de lixo. Eu precisava de uma maneira de ter permissão para classificá-los em diretórios profundos (por exemplo, /work/client-name/project/document.ext ), mas ainda tenho uma compreensão de nível superior para ver o que há de novo. Escrevi um pequeno script bash que mantinha um diretório "recente" que continha links simbólicos para o conteúdo recente.

Algo tão simples quanto isso pode funcionar para você. Basta manter o encadeamento dos argumentos -not -name ou filtrar positivamente se você tiver algo que possa procurar ...

#!/bin/bash

rm new-path/* # clean up old symlinks
find original-path -type d -maxdepth 1 -not -name folder2\
    -exec ln -s -t new-path/ {} +

Este é apenas o primeiro nível, mas você pode expandi-lo para:

  • Pesquise os diretórios que você deseja espelhar
  • Crie diretórios novos (reais) em new-path
  • Repasse os novos diretórios e procure nas versões antigas os arquivos desejados, criando links simbólicos. Como o original, encontre algum aumento nos caminhos.
  • A instrução inicial de limpeza também precisará ser rm -rf new-path/* porque são diretórios reais. Tenha cuidado com isso.
por Oli 24.05.2011 / 17:16
1

Eu encontrei isto:

  

O cmdfs é um sistema de arquivos virtual do FUSE que aplica um filtro arbitrário   comando para os arquivos selecionados em uma árvore de diretórios de origem para criar o   arquivos de destino.

Aqui está um artigo sobre isso: link

E a fonte no github: link

    
por Rolf 27.01.2018 / 03:50