9

我正在寻找 Perl 中的虚拟文件系统层。无论实际文件系统是如何实现的,都可以为基本文件系统例程(例如ls等)提供一般抽象。mkdir

我想要一个这样的界面:

# 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 上找到了 VFS 包,不幸的是只有空的、未实现的模块。

某些东西已经实施了吗?现在,我只寻找“本地”文件系统和 ftp 或 ssh——我不需要数据库“文件系统”或任何其他奇特的“文件系统”,如 CVS 左右。如果没有任何标记系统或类似系统,搜索 20k MetaCPAN 模块会很痛苦……</p>

4

4 回答 4

1

一些 FUSE 实现呢?(用户空间中的文件系统)?我猜想至少有一个基于此的 perl 中实现的伪文件系统。毕竟应该很容易实现,基本上就是mount、ls、df、stat等一些操作。我曾经浏览过 C 中的 autofs 源代码,看起来很简单。您可能还想查看http://code.google.com/p/mogilefs/

于 2013-07-14T08:06:14.613 回答
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

于 2013-09-05T14:24:54.293 回答
1

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

大多数功能都以File::System::Object包的方法呈现。

于 2015-03-09T09:33:47.773 回答
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 是我过去使用过的,而且还不错,尽管如果可以的话,你可能会更轻松以某种方式在本地挂载远程文件系统,做你必须做的事情,然后卸载它。

于 2014-08-12T04:51:42.067 回答