Parfois, je me sens comme un directory, parfois je me sens comme un file régulier

Pour des raisons d'organisation, j'aimerais un certain object de système de files qui apparaisse le plus souvent en tant que file, à l'occasion, pour apparaître sous la forme d'un directory.

L'idée de base est que génériquement pour cp , mv , find , updatedb / locate , j'aimerais que l'object apparaisse comme un file individuel. Pour d'autres applications telles que vlc , rythmbox , feh et okular , j'aimerais qu'il apparaisse sous forme de directory. Quelqu'un peut-il suggérer un mécanisme pour faire cela?

Pour illustrer, permettez-moi de donner un exemple:

Je vais donner l'object que j'ai en tête le nom _my_books_on_m4_programming.arch_. Pour déplacer / copyr ou find / localiser cet object ressemble à un file, mais quand je veux lire un livre dans l'object, il ressemble à un directory, par exemple: pour la command okular my_books_on_m4_programming.arch/beginner/m4_for_dummies.pdf .

J'ai pensé à deux solutions possibles, mais j'aurais besoin d'aide pour l'un ou l'autre.

  • Le premier est de modifier mon linux pour utiliser un atsortingbut spécial du système de files. Si l'atsortingbut est défini alors je cherche un environnement par exemple SPECIAL_OBJECT_IS_FILE . Si c'est réglé, je le traite comme un file. S'il n'est pas défini, je le traite comme un directory. Le problème avec cette approche est que je ne vois pas comment l'implémenter sans modifier virtuellement tout le système.

  • La seconde technique serait de stocker les files dans une archive (eg tar, zip, rar) que je monte (rw) dans un directory. Pour traiter l'object en tant qu'archive, reportez-vous à l'archive d'origine, pour traiter l'object en tant que directory, reportez-vous au sharepoint assembly. Est-ce possible?

  • La demi-technique est simplement une torsion sur la seconde au lieu de monter une archive, je crée un lien vers elle. Est-ce que quelque chose comme ça est possible?

Je ne peux pas croire que personne d'autre n'a jamais voulu faire une chose semblable alors je soupçonne qu'il y a un moyen. Suggestions?

D'accord. J'avoue avoir eu du mal à find un titre pour ma question, alors j'ai essayé de faire une blague avec une vieille publicité – désolé.

Je ne comprends pas très bien pourquoi vous ne voulez pas que les files apparaissent sous forme de files individuels dans certaines circonstances. Après tout, si my_books_on_m4_programming.arch est un directory, vous pouvez toujours le copyr avec cp -rp , le localiser avec locate et ainsi de suite.

FUSE (Filesystem in Userspace) permet d'implémenter des filesystems légers et de nombreux filesystems FUSE offrent des vues alternatives de files existants. Le même file (comme dans le même path de file) apparaît à la fois car un directory et un file régulier confondent de nombreuses applications, mais il existe de nombreuses solutions pour faire apparaître le même file en tant que directory dans un location et en tant que file dans un autre endroit.

En particulier, AVFS fait apparaître les archives et les files distants sous forme de directorys. Je pense que c'est la chose la plus proche de ce que vous cherchez.

 $ 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 

Vous pourriez envisager d'utiliser des filesystems en boucle.

Tout d'abord, créez un file pour contenir votre système de files:

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

Cela créera un file vide de 2 Go. Ensuite, vous devez l'attacher à un périphérique de bouclage:

 losetup /dev/loop0 ~/myfilesys 

Maintenant, créez un système de files:

 mkfs -t ext3 /dev/loop0 

Enfin, montez votre système de files:

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

Quand vous avez terminé:

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

Et pour réutiliser plus tard:

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

(Oui, je sais que vous pouvez combiner les étapes losetup et mount , mais à des fins d'illustration, il est plus clair de voir ce qui se passe en les séparant).

Maintenant, le file ~/myfilesys ressemblera et agira comme un file pour toutes les commands, mais lorsqu'il est monté, vous pouvez voir les files de ce système de files dans ~/myfilesys.d .