Às vezes me sinto como um diretório, algumas vezes me sinto como um arquivo regular

4

Para fins de organização, eu gostaria que um determinado objeto do sistema de arquivos, que na maioria das vezes aparecesse como um arquivo, ocasionalmente, aparecesse como um diretório.

A ideia básica é que, genericamente, para cp , mv , find , updatedb / locate , gostaria que o objeto aparecesse como um arquivo individual. Para outros aplicativos, como vlc , rythmbox , feh e okular , gostaria que ele aparecesse como um diretório. Alguém pode sugerir um mecanismo para fazer isso?

Para ilustrar, deixe-me dar um exemplo:

Vou dar ao objeto que tenho em mente o nome _my_books_on_m4_programming.arch_. Para os propósitos de mover / copiar ou localizar / localizar este objeto, parece um arquivo, mas quando eu quero ler um livro no objeto, ele se parece com um diretório, ie: para o comando okular my_books_on_m4_programming.arch/beginner/m4_for_dummies.pdf .

Pensei em duas soluções e meia possíveis, mas precisaria de ajuda com qualquer uma delas.

  • O primeiro é modificar meu linux para usar um atributo especial do sistema de arquivos. Se o atributo estiver definido, procure por um ambiente, por exemplo, SPECIAL_OBJECT_IS_FILE . Se estiver definido, trato como um arquivo. Se não estiver definido, trate-o como um diretório. O problema com essa abordagem é que não vejo como implementá-la sem modificar praticamente todo o sistema.

  • A segunda técnica seria armazenar os arquivos em um arquivo (por exemplo, tar, zip, rar) que eu montei (rw) em algum diretório. Para tratar o objeto como um arquivo, consulte o arquivo original, para tratar o objeto como um diretório, consulte o ponto de montagem. Isso é possível?

  • A metade da técnica é simplesmente uma reviravolta no segundo, em vez de montar um arquivo que eu crio de link para ele. É algo assim possível?

Eu não posso acreditar que ninguém mais quis fazer algo semelhante, então eu suspeito que haja algum jeito. Sugestões?

Ok. Confesso que tive problemas em inventar um título para a minha pergunta, então tentei fazer uma piada com um comercial muito antigo - desculpe.

    
por HandyGandy 22.07.2011 / 08:49

2 respostas

3

Não entendo muito bem por que você não deseja que os arquivos apareçam como arquivos individuais em algumas circunstâncias. Afinal, se my_books_on_m4_programming.arch for um diretório, você ainda poderá copiá-lo com cp -rp , localizá-lo com locate e assim por diante.

O FUSE (sistema de arquivos no espaço do usuário) fornece uma maneira de implementar sistemas de arquivos leves, e há muitos sistemas de arquivos FUSE que fornecem exibições alternativas de sistemas de arquivos existentes. arquivos. Fazer com que o mesmo arquivo (como no mesmo caminho de arquivo) apareça como um diretório e um arquivo normal confundiria muitos aplicativos, mas há muitas soluções existentes para fazer o mesmo arquivo aparecer como um diretório em um local e como um arquivo em outro local.

Em particular, o AVFS faz com que arquivos e arquivos remotos apareçam como diretórios. Eu acho que é a coisa mais próxima do que você está procurando.

$ mountavfs
$ ls my_books_on_m4_programming* 
my_books_on_m4_programming.tgz
$ tar tzf my_books_on_m4_programming.tgz 
beginner/m4_for_dummies.pdf
$ ls ~/.avfs$PWD/my_books_on_m4_programming.tgz\#/
beginner
$ okular ~/.avfs$PWD/my_books_on_m4_programming.tgz\#/beginner/m4_for_dummies.pdf
    
por 22.07.2011 / 16:02
1

Você poderia considerar o uso de sistemas de arquivos de loopback.

Primeiro, crie um arquivo para conter seu sistema de arquivos:

dd if=/dev/zero of=~/myfilesys bs=8K count=256

Isso criará um arquivo vazio de 2GB. Em seguida, você precisa anexá-lo a um dispositivo de loopback:

losetup /dev/loop0 ~/myfilesys

Agora, crie um sistema de arquivos:

mkfs -t ext3 /dev/loop0

Finalmente, monte seu sistema de arquivos:

mkdir ~/myfilesys.d
mount /dev/loop0 ~/myfilesys.d

Quando terminar:

umount /dev/loop0
losetup -d /dev/loop0

E para reutilizar mais tarde:

losetup /dev/loop0 ~/myfilesys
mount /dev/loop0 /mnt/myfilesys.d

(Sim, sei que você pode combinar as etapas losetup e mount , mas, para fins ilustrativos, é mais claro ver o que está acontecendo dividindo-as).

Agora, o arquivo ~/myfilesys parecerá e funcionará como um arquivo para todos os comandos, mas, quando montado, você poderá ver os arquivos nesse sistema de arquivos em ~/myfilesys.d .

    
por 22.07.2011 / 10:21