2009-06-26 71 views
13

Trong Perl, làm thế nào tôi có thể tạo một thư mục con và, đồng thời, tạo thư mục cha nếu chúng không tồn tại? Giống như lệnh mkdir -p của UNIX?Làm cách nào để tạo thư mục thư mục và thư mục cha trong một lệnh Perl?

+0

Đã thêm câu hỏi này để tôi có thể dễ dàng tìm lại câu hỏi này trong tương lai, thay vì tìm kiếm nó mọi lúc. Tôi luôn tìm kiếm điều này trong POSIX.pm, vì một lý do nào đó. – skiphoppy

Trả lời

22
use File::Path qw(make_path); 
make_path("path/to/sub/directory"); 

Các mkpath phản đối và make_path ưa thích bắt nguồn từ một cuộc thảo luận trong Perl 5 Khuân vác sợi đó là lưu trữ here.

Tóm lại, thử nghiệm Perl 5.10 bật lên sự lúng túng trong phân tích cú pháp đối số của giao diện makepath(). Vì vậy, nó đã được thay thế bằng một phiên bản đơn giản hơn đã lấy một băm làm đối số cuối cùng để thiết lập các tùy chọn cho hàm.

+3

@skiphoppy: Điều này vẫn không phải là "như lệnh mkdir -p của UNIX" như đã nêu trong câu hỏi. trang man của mkdir hiển thị -p, --parents no error if existing, make parent directories as needed Nhưng make_path sẽ trả về false nếu thư mục tồn tại. (ví dụ, make_path "/ tmp/foo" hoặc chết; # sẽ chết nếu/tmp/foo tồn tại) – Randall

3

Sử dụng mkpath từ các module File :: Đường dẫn:

use File::Path qw(mkpath); 
mkpath("path/to/sub/directory"); 
+1

Nghiên cứu điều này ngay bây giờ, tôi thấy rằng mkpath() không còn được dùng nữa và giao diện chính thức giờ là make_path(). Nếu ai đó viết ra một lời giải thích tuyệt vời như những gì mà mua chúng tôi, tôi sẽ làm cho rằng câu trả lời được chấp nhận. – skiphoppy

3

Vui lòng bỏ qua nếu bạn đang tìm kiếm một Perl mô-đun với 'mkdir -p' chức năng nhưng đoạn mã sau sẽ làm việc:

my $dir = '/root/example/dir'; 

system ("mkdir -p $dir 2> /dev/null") == 0 
    or die "failed to create $dir. exiting...\n"; 

bạn có thể sử dụng một mô-đun nhưng sau đó bạn phải cài đặt nó trên mỗi máy chủ bạn đang đi đến cổng mã của bạn trên. Tôi thường thích sử dụng chức năng hệ thống cho một tác phẩm như mkdir vì đó là chi phí thấp hơn để nhập và gọi mô-đun khi tôi chỉ cần một lần để tạo thư mục.

+0

Cách tiếp cận đó có ý nghĩa nếu bạn muốn tránh cài đặt mô-đun. Tôi thường thích yêu cầu cài đặt các mô-đun tôi cần hoặc tôi từ chối hỗ trợ hệ thống. :) Tôi thích sử dụng các mô-đun để tôi có thể gặt hái lợi ích của việc thử nghiệm và nghiên cứu đi vào chúng, vì vậy tôi có thể tránh được các lỗi như không kiểm tra các cuộc gọi hệ thống hoặc mất thông báo lỗi, và bởi vì nó ít chi phí hơn để không có để tạo quy trình. – skiphoppy

+0

Điều đó không tạo ra sự phụ thuộc vào hệ điều hành? –

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