9 votes

Système de fichiers virtuel en Perl

Je cherche une couche de système de fichiers virtuel en Perl. Quelque chose qui fournirait une abstraction générale pour les routines de base du système de fichiers comme ls , mkdir et ainsi de suite, quelle que soit la manière dont le système de fichiers est mis en œuvre.

J'aimerais une interface comme celle-ci :

# create a directory "/some/path/tmp" in my current filesystem
my $plainfs = Module::new->(type => 'local', root=>'/some/path);
$plainfs->mdkir("/tmp"); 

# create "tmp" dir on a remote filesystem
my $sshfs = Module::new->(type=>'ssh', root=>'user:password@example.com:~/pub')
$sshfs->mdkir("/tmp"); 

J'ai trouvé le paquet VFS sur MetaCPAN, il n'y a malheureusement que des modules vides et non implémentés.

Quelque chose a-t-il déjà été mis en œuvre ? Pour l'instant, je ne cherche que des systèmes de fichiers "locaux" et ftp ou ssh - je n'ai pas besoin d'un "système de fichiers" de base de données ou d'un autre "système de fichiers" exotique comme CVS ou autre. La recherche de 20k modules MetaCPAN est pénible sans aucun système d'étiquetage ou autre

1voto

Piotr Wadas Points 1412

Pourquoi pas une implémentation de FUSE ? (système de fichiers dans l'espace utilisateur) ? Je suppose qu'il existe au moins un pseudo-système de fichiers implémenté en perl basé sur ce système. Après tout, cela devrait être assez facile à implémenter, en gros ce n'est rien de plus qu'un ensemble d'opérations comme mount, ls, df, stat et ainsi de suite. J'ai parcouru une fois les sources d'autofs en C, ça avait l'air assez simple. Vous pourriez vouloir voir http://code.google.com/p/mogilefs/ également.

1voto

Jiri Klouda Points 902

Ne soyez pas trop attaché à l'approche par module. Tout ce dont vous avez besoin, c'est d'un utilitaire qui monte le système de fichiers SSH/FTP en tant que système de fichiers local, puis vous utiliserez simplement des commandes standard comme cd, mkdir, etc. La raison pour laquelle vous ne voyez pas de modules pour cela est que cette approche est généralement préférée.

Regarder http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FileSystems

Vous utiliserez simplement FUSE pour monter l'un de ces systèmes de fichiers et c'est tout. Voici quelques liens à consulter, mais la plupart d'entre eux peuvent être obtenus sous forme de paquets dans la plupart des distributions.

http://sourceforge.net/projects/lufs/ http://lftpfs.sourceforge.net

Voici un module qui permet de monter simplement les systèmes de fichiers FUSE en perl :

http://search.cpan.org/~dpavlin/Fuse/Fuse.pm

1voto

Jose Faeti Points 6997

Peut-être Fichier::Système est ce que vous recherchez. Il fournit les fonctionnalités de base que l'on trouve dans les systèmes d'exploitation courants pour gérer un système de fichiers virtuel (qui n'est pas nécessairement composé uniquement de fichiers et de répertoires).

La plupart des fonctionnalités sont présentées en tant que méthode de la Fichier::Système::Objet l'emballage.

0voto

JoshSN Points 11

Il existe BEAUCOUP de modules File::* qui gèrent différentes parties de la gestion des systèmes de fichiers multiplateformes.

Par exemple :

use File::Spec::Functions qw(catfile);

vous permettra d'obtenir mon $filename = catfile $Root, $path, "$filename.$ext" ; ou mon $new_directory = catfile $path, "new_sub_directory" ; et assurez-vous d'utiliser les séparateurs corrects, par exemple / ou \, et cetera.

Une autre chose que vous semblez souhaiter peut être obtenue avec :

use File::Path qw(make_path);

ce qui est très pratique, et peut être appelé comme make_path($new_directory, { mode => 0755 }) ;

Je ne suis pas sûr que File::System gère réellement les systèmes distants comme vous le souhaitez.

Il y a plusieurs façons de gérer cela, mais je pense que Net::SSH::Expect est ce que j'ai utilisé dans le passé, et ce n'est pas trop mal, bien que vous auriez probablement plus de facilité si vous pouviez monter le système de fichiers distant localement, faire ce que vous avez à faire, puis le démonter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X