Nhận không gian trống có sẵn trong thư mục hiện tại trong Bash


25

Tôi biết df -hpwd, nhưng có vẻ hơi phức tạp đối với phần kết hợp regex. Có ý kiến ​​gì không?


1
Ý bạn là du -hsao
jweyrich

Câu trả lời:


45

Đầu ra có thể được phân tích dễ dàng hơn một chút bằng cách sử dụng -Ptùy chọn sẽ đảm bảo rằng:

  1. Thông tin về mỗi hệ thống tệp luôn được in trên chính xác một dòng; một thiết bị gắn kết không bao giờ được đặt trên một dòng của chính nó. Điều này có nghĩa là nếu tên thiết bị gắn kết dài hơn 20 ký tự (ví dụ: đối với một số giá treo mạng), các cột bị sai lệch.

Điều này làm cho nó dễ dàng hơn nhiều để có được không gian trống có sẵn:

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

( -hsử dụng megabyte, gigabyte, v.v. Nếu hệ thống của bạn không có nó, chỉ sử dụng -kcho kilobyte.)

Nếu chúng ta vượt qua dfmột đường dẫn, nó sẽ chỉ trả về 2 hàng: một hàng tiêu đề và sau đó là dữ liệu về hệ thống tệp có chứa đường dẫn. Chúng ta có thể sử dụng đuôi để lấy hàng thứ hai. Chúng tôi biết rằng không gian có sẵn là trong cột thứ 4, vì vậy chúng tôi lấy đó với awk. Tất cả điều này có thể được thực hiện với awk:

$ df -Ph . | awk 'NR==2 {print $4}'

hoặc nhiều bộ lọc khác .


Bạn có thể tối ưu hóa lệnh của mình bằng cách sử dụng biến môi trường $PWDthay vì sử dụng thay thế lệnh và loại bỏ nhu cầu về đuôi: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX

@SiegeX: Tôi đồng ý làm tất cả trong đó awklà tốt hơn. Tôi bao gồm lệnh dài hơn vì tôi muốn có một ví dụ về cách người ta có thể xây dựng một chuỗi các lệnh đơn giản để làm một cái gì đó phức tạp hơn. Tôi đã cập nhật câu trả lời để bao gồm sự cải thiện của bạn.
Steven D

-Plà tiêu chuẩn ( Pdành cho POSIX). Nhưng -hlà một phần mở rộng GNU (cũng tồn tại trên một số hệ thống khác, nhưng ví dụ như trên OpenBSD, nó không tương thích với -P).
Gilles 'SO- ngừng trở nên xấu xa'

Bạn có thể thực hiện việc này mà không cần thực hiện bằng cách sử dụng công tắc --output = avail: df -h --output=avail . | tail -1
Floyd

"Bạn có thể tối ưu hóa lệnh của bạn". Không hẳn vậy. Chạy cả hai ống 10.000 lần (như trong time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) cho thấy không có sự khác biệt có ý nghĩa về tốc độ, điều này không gây ngạc nhiên - việc gọi tailkhông tốn kém và awksẽ được bỏ qua đến cuối đầu vào ... Có thể có một sự khác biệt về PDP-11 ...
David Tonhofer

10

Làm thế nào về làm df -h .. Điều này sẽ cung cấp cho bạn không gian trống có sẵn của phân vùng mà thư mục làm việc hiện tại của bạn đang ở.

Một ví dụ nhỏ:

 /usr/local/nagios/libexec # df -h .
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/vg00-lvol1
                       9.9G  6.1G  3.4G  65% /

4

Theo byte:

df --output=avail -B 1 "$PWD" | tail -n 1

Con người có thể đọc được:

df --output=avail -h "$PWD" | tail -n 1

hoặc là

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"

hoặc là

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.