Perl中的虚拟文件系统

时间:2013-07-14 07:48:30

标签: perl

我正在寻找Perl中的虚拟文件系统层。无论实际文件系统如何实现,都可以为lsmkdir等基本文件系统例程提供通用抽象。

我想要一个这样的界面:

# 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"); 

我在MetaCPAN上找到the VFS package,遗憾的是只有空的,未实现的模块。

是否已经实施了某些内容?现在,我只寻找“本地”文件系统和ftp或ssh-我不需要数据库“文件系统”或任何其他奇特的“文件系统”,如CVS左右。搜索20k MetaCPAN模块很痛苦,没有任何标记系统或类似...

4 个答案:

答案 0 :(得分:1)

一些FUSE实现怎么样? (用户空间中的文件系统)?我猜想在perl中至少有一个基于此实现的伪文件系统。毕竟,它应该很容易实现,基本上它只不过是一些操作,如mount,ls,df,stat等等。我曾经通过C中的autofs源代码,看起来很简单。您可能也希望看到http://code.google.com/p/mogilefs/

答案 1 :(得分:1)

不要太过于坚持模块方法。您只需要一些将SSH / FTP文件系统安装为本地文件系统的实用程序,然后您只需使用标准命令,如cd,mkdir等。您没有看到任何模块的原因是这种方法通常是首选。

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

您只需使用FUSE挂载任何这些文件系统即可。以下是一些要查看的链接,但大多数链接也可以在大多数发行版中获得。

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

以下是在perl中简单安装FUSE文件系统的模块:

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

答案 2 :(得分:1)

也许File::System是您正在寻找的。它提供了常见操作系统中用于管理虚拟文件系统的基本功能(不一定仅包含文件和目录)。

大多数功能都是File::System::Object包的方法。

答案 3 :(得分:0)

有很多File :: *模块可以处理跨平台文件系统管理的不同部分。

例如:

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

会让你的$ filename = catfile $ root,$ path,“$ filename。$ ext”;或者我的$ new_directory = catfile $ path,“new_sub_directory”;并确保使用正确的分隔符,例如/或\,等等。

你似乎想要的另一件事可以用:

use File::Path qw(make_path);

非常方便,可以像make_path一样调用($ new_directory,{mode => 0755});

我不确定File :: System是否真的按照你想要的方式处理远程系统。

我可以通过几种不同的方式处理这个问题,但我认为Net :: SSH :: Expect是我过去使用过的,并且不是太糟糕,尽管你可能会有更轻松的时间如果你能以某种方式在本地挂载远程文件系统,那就做你需要做的事情,然后卸载它。