2008-11-17 14 views
11

Có một cách nhanh chóng và bẩn để nói theo chương trình, trong kịch bản lệnh shell hoặc trong Perl, cho dù một đường dẫn nằm trên một hệ thống tập tin từ xa (nfs hoặc tương tự) hay một địa phương? Hoặc là cách duy nhất để làm điều này để phân tích cú pháp/etc/fstab và kiểm tra loại hệ thống tập tin?Làm cách nào để biết tệp có nằm trên hệ thống tệp từ xa với Perl không?

Trả lời

13

stat -f -c %T <filename> nên làm những gì bạn muốn. Bạn cũng có thể muốn -l

+2

Một lần nữa, không di động với Solaris (mặc dù tôi có lệnh trên máy, nó không phải là vấn đề tiêu chuẩn). –

2

Bạn có thể sử dụng "df -T" để lấy loại hệ thống tệp cho thư mục hoặc sử dụng tùy chọn -t để giới hạn báo cáo cho các loại cụ thể (như nfs) và nếu nó trở lại với "không có hệ thống tệp nào được xử lý", thì đó không phải là một trong những thứ bạn đang tìm kiếm.

df -T $dir | tail -1 | awk '{print $2;}' 
+1

Không di động - 'df -T' không hoạt động trên Solaris, chẳng hạn. –

+0

Nếu tất cả các hệ thống tập tin mạng sử dụng máy chủ: ngữ nghĩa đường dẫn cho tên thiết bị, thì tôi giả sử bạn có thể kiểm tra: trong tên thiết bị hoặc thứ gì đó có hiệu lực sau đó. –

0

Trên một số hệ thống, số thiết bị là âm cho các tệp NFS. Như vậy,

print "remote" if (stat($filename))[0] < 0 
2

Nếu bạn sử dụng df vào một thư mục để nhận được thông tin duy nhất của thiết bị nó cư trú trong, ví dụ cho thư mục hiện tại:

df . 

Sau đó, bạn chỉ có thể phân tích đầu ra, ví dụ:

df . | tail -1 | awk '{print $1}' 

để lấy tên thiết bị.

1

Tôi đã thử nghiệm sau đây trên solaris7,8,9 & 10 và nó có vẻ là đáng tin cậy

/bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}' 

nên cung cấp cho bạn có các loại fs chứ không phải cố gắng để phù hợp cho một "host: con đường" trong điểm gắn kết của bạn.