2013-07-14 34 views
9

Tôi đang tìm lớp hệ thống tệp ảo trong Perl. Một cái gì đó mà sẽ cung cấp một trừu tượng chung cho thói quen hệ thống tập tin cơ bản như ls, mkdir và như vậy, bất kể như thế nào hệ thống tập tin thực tế được thực hiện.Hệ thống tệp ảo trong Perl

Tôi muốn một giao diện như thế này:

# 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:[email protected]:~/pub') 
$sshfs->mdkir("/tmp"); 

tôi thấy the VFS package trên MetaCPAN, tiếc là chỉ có sản phẩm nào, các module chưa thực hiện.

Có điều gì đó đã được triển khai không? Ngay bây giờ, tôi chỉ tìm kiếm các hệ thống tập tin "cục bộ" và ftp hoặc ssh - tôi không cần một hệ thống tập tin "cơ sở dữ liệu" hay bất kỳ "hệ thống tệp" kỳ lạ nào khác như CVS hay như vậy. Tìm kiếm 20k mô-đun MetaCPAN gây đau đớn mà không cần bất kỳ hệ thống gắn thẻ nào hoặc giống nhau ...

+2

Tệp :: Hệ thống có vẻ tốt: http://search.cpan.org/~hanenkamp/File-System-1.16/ – perreal

+0

@perreal Điều này thực sự tốt đẹp. Sẽ kiểm tra sâu hơn. Làm thế nào để bạn tìm thấy nó? Tôi đang tìm kiếm METACPAN cho "hệ thống tập tin" một gói này không được hiển thị trong 7 trang đầu tiên. (Tìm kiếm Metacpan là REALLY TERRIBLE. Cảm ơn bạn rất nhiều – kobame

+1

@kobame trong khi có thể gợi ý tôi đã làm việc ngược từ câu trả lời, nếu tôi tìm kiếm "hệ thống tệp" (không có trích dẫn) trên MetaCPAN thì đây là kết quả đầu tiên. là IME tuyệt vời, nhưng nó chỉ có thể làm việc với dữ liệu mà nó có và đầu vào bạn cung cấp cho nó –

Trả lời

1

Có lẽ File::System là những gì bạn đang tìm kiếm. Nó cung cấp các chức năng cơ bản được tìm thấy trong các hệ điều hành chung để quản lý một hệ thống tệp ảo (không nhất thiết chỉ bao gồm các tệp và thư mục).

Hầu hết các chức năng được trình bày theo phương pháp của gói File::System::Object.

1

những gì về việc thực hiện FUSE? (hệ thống tệp trong không gian người dùng)? Tôi đoán có ít nhất một hệ thống tập tin giả được thực hiện trong perl dựa trên đó. Sau khi tất cả, nó phải được khá dễ dàng để thực hiện, về cơ bản nó không nhiều hơn một số thiết lập các hoạt động như gắn kết, ls, df, stat và như vậy. Tôi đã từng thông qua các nguồn tự động trong C, trông khá đơn giản. Bạn cũng có thể muốn xem http://code.google.com/p/mogilefs/.

+0

Tôi không muốn 'triển khai' hệ thống tập tin, nhưng * sử dụng * đã được thực hiện triển khai, do đó, tìm kiếm một mô-đun những gì đã làm trừu tượng.Có lẽ nó là "doable", nhưng hy vọng trong một cái gì đó đã được thực hiện :) Đi kiểm tra mogilefs - thanx cho con trỏ. – kobame

+0

chỉ cần lấy bất kỳ hệ thống tập tin không gian người dùng nào và loại bỏ những gì mà nó phải làm theo từng nội dung hoạt động cơ bản, ở một số cấp cao nhất, có thể bằng cách đặt "trả về true" hoặc tương tự. –

1

Đừng quá lo lắng về phương pháp mô-đun. Tất cả những gì bạn cần là một số tiện ích gắn kết hệ thống tập tin SSH/FTP như một hệ thống tập tin cục bộ và sau đó bạn sẽ chỉ sử dụng các lệnh chuẩn như cd, mkdir và vân vân. Lý do tại sao bạn không thấy bất kỳ mô-đun nào cho điều này là cách tiếp cận này thường được ưu tiên.

Nhìn vào http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FileSystems

Bạn chỉ đơn giản là sẽ sử dụng FUSE để gắn kết bất kỳ của những hệ thống tập tin và đó là nó. Dưới đây là một số liên kết để xem xét, nhưng hầu hết những người có thể được nhận như là gói trong hầu hết các bản phân phối quá.

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

Dưới đây là mô-đun chỉ đơn giản là gắn kết hệ thống tập tin FUSE trong perl:

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

0

Có rất nhiều các tập tin :: * module mà xử lý các phần khác nhau của cross-platform quản lý hệ thống tập tin.

Ví dụ:

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

sẽ cho phép bạn có được của tôi $ filename = $ catfile gốc, $ path "$ filename $ ext"; hoặc đường dẫn $ new_directory = catfile $ của tôi, "new_sub_directory"; và đảm bảo sử dụng các dấu phân cách chính xác, ví dụ:/hoặc \, v.v.

Một điều bạn dường như muốn có thể có với:

use File::Path qw(make_path); 

mà là khá tiện dụng, và có thể được gọi như make_path ($ new_directory, {mode => 0755});

Tôi không thực sự chắc chắn nếu Tệp :: Hệ thống thực sự xử lý hệ thống từ xa theo cách bạn muốn.

Một vài cách khác nhau xảy ra với tôi để xử lý điều đó, nhưng tôi nghĩ Net :: SSH :: Mong đợi là những gì tôi đã sử dụng trong quá khứ và không quá tệ, mặc dù bạn có thể dễ dàng hơn thời gian nếu bạn bằng cách nào đó có thể gắn kết hệ thống tập tin từ xa tại địa phương, làm những gì bạn phải làm, sau đó unmount nó.

Các vấn đề liên quan