2009-02-11 25 views
5

Tôi đang cố gắng gỡ bỏ một tệp. Trước khi untarring tôi muốn biết không gian trống có sẵn trên khối lượng gắn kết. Kế hoạch là nếu không có đủ không gian tôi sẽ không bỏ nó! Vì vậy, làm thế nào tôi có thể tìm thấy không gian trống có sẵn trên một khối lượng gắn kết bằng cách sử dụng Perl? Nhân tiện, tôi đang sử dụng Perl cho tar và untar.Làm thế nào tôi có thể tìm thấy dung lượng trống có sẵn trên các ổ đĩa được gắn bằng Perl?

Mọi người đang nói về dfdh nhưng các lệnh này không hoạt động trên các điểm gắn kết. Điều gì xảy ra nếu tôi muốn tìm không gian trống mà tôi có thể viết vào một điểm gắn kết?

Trả lời

3

Sử dụng vỏ lệnh để tạo ra một số K-miễn phí duy nhất mà Perl có thể sử dụng:

Thay đổi vào thư mục nơi bạn muốn gỡ bỏ (nếu chưa có) và thực hiện:

df . | grep -v '^Filesystem' | awk 'NF=6{print $4}NF==5{print $3}{}' 

Hoặc thay thế "." với điểm gắn kết thực tế.

Grep được loại bỏ tiêu đề và bản in đang tìm ra các kilobyte có sẵn cho cả hai dòng phân chia và không chia tách.

này được dựa trên các loại sau đây của đầu ra, bạn có thể phải điều chỉnh nếu UNIX của bạn kết quả đầu ra một cái gì đó khác nhau:

 
Filesystem 1K-blocks  Used Available Use% Mounted on 
/dev/sda4  206434224 56965356 139065176 30%/
varrun   1037296  132 1037164 1% /var/run 
varlock   1037296   0 1037296 0% /var/lock 
udev   1037296  68 1037228 1% /dev 
devshm   1037296  12 1037284 1% /dev/shm 
/dev/sda2   93327  43535  44973 50% /boot 
/dev/sdc1  155056484 29417456 117824612 20% /media/extra160 
gvfs-fuse-daemon 
       206434224 56965356 139065176 30% /home/pax/.gvfs 
+2

Sử dụng mô-đun cpan để làm điều đó là đúng cách. Bạn muốn tránh các cuộc gọi shell khi nó không cần thiết ... – Neil

+1

@Neil, nếu bạn nhìn vào nguồn của Filesys :: DiskFree, bạn sẽ thấy rằng tất cả * nó * làm là gọi df dưới bìa. Tính di động của nó dường như không mở rộng cho Windows Perl mà thường là lý do duy nhất tôi sẽ bận tâm để cài đặt một mô-đun CPAN (kể từ khi Windows/* IX di chuyển có xu hướng được khôn lanh). Vì tôi chỉ có xu hướng nhắm mục tiêu Linux hoặc Linux/Windows (tôi không thường quan tâm đến Solaris hoặc BSD), tôi muốn tự mình làm điều đó và tránh sự cần thiết phải cài đặt một mô-đun khác. – paxdiablo

+0

Điều này có cung cấp số tiền khả dụng theo byte không? – Ben

13

Bạn có thể muốn mô-đun CPAN Filesys::DfPortable.

+0

Không hoạt động trên CentOS (6.3, ít nhất) ... Tôi cho rằng đó là vì hệ thống tệp gốc của Centos là cái gì đó miễn là "/ dev/mapper/vg_srvctoklos-lv_root", do đó dòng df được chia thành hai dòng ... – MarcoS

+1

Sau đó, bạn muốn mô-đun CPAN [Filesys :: DfPortable] (https://metacpan.org/pod/Filesys::DfPortable) mà "nên làm việc với tất cả các phiên bản của Windows (95 trở lên), và với tất cả các hương vị của Unix thực hiện các lệnh statvfs hoặc statfs. Điều này bao gồm Linux, * BSD, HP-UX, AIX, Solaris, Mac OS X, Irix, Cygwin, v.v ... " – geira

+0

@geira Cảm ơn bạn đã đề cập đến [ Filesys :: DfPortable] (https://metacpan.org/pod/Filesys::DfPortable) mô-đun. Đó là cách dứt khoát để đi. Thật không may là điều này không hiển thị như là câu trả lời hay nhất (hoặc có thể là một giải pháp thay thế) cho câu hỏi của chủ đề này. Đây là những gì mọi người tìm thấy trang này thông qua tìm kiếm trên web sẽ thấy. – Keve

1

Bạn chỉ có thể sử dụng được xây dựng trong linux lệnh để có được kết quả:

my $vol = "/dev/volume"; 
my $freespace = `df $vol | grep '$vol' | awk '{print \$4}'`; 
# free space in megabytes. 
$freespace = sprintf("%01.2f", $freespace/1024); 
+1

Không sử dụng vỏ khi bạn không cần. – Neil

0

Hãy thử Filesys::DF (hệ thống posix) hoặc Filesys::DfPortable (Windows cũng). Cả hai đều sử dụng mã gốc để liệt kê các số liệu thống kê của FS.

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