Uzyskaj wolne miejsce dostępne w bieżącym katalogu w Bash


25

Wiem df -hi pwd, ale wydaje się to trochę skomplikowane dla części dopasowującej wyrażenia regularne. Jakieś pomysły?


1
Miałeś na myśli du -h?
jweyrich 18.01.11

Odpowiedzi:


45

Dane wyjściowe można nieco łatwiej przeanalizować, korzystając z -Popcji, która zapewni:

  1. Informacje o każdym systemie plików są zawsze drukowane dokładnie w jednym wierszu; urządzenie do montowania nigdy nie jest samo w sobie ustawiane na linii. Oznacza to, że jeśli nazwa urządzenia do montowania ma więcej niż 20 znaków (np. W przypadku niektórych montowań sieciowych), kolumny nie są wyrównane.

To znacznie ułatwia uzyskanie dostępnej wolnej przestrzeni:

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

( -hużywa megabajtów, gigabajtów itd. Jeśli twój system go nie ma, używaj -ktylko dla kilobajtów).

Jeśli przekażemy dfścieżkę, zwróci tylko 2 wiersze: wiersz nagłówka, a następnie dane o systemie plików, który zawiera ścieżkę. Możemy użyć ogona, aby złapać tylko drugi rząd. Wiemy, że dostępne miejsce znajduje się w czwartej kolumnie, więc sięgamy po to awk. Wszystko to można zrobić za pomocą awk:

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

lub wiele innych zestawów filtrów .


Możesz zoptymalizować swoje polecenie, używając zmiennej środowiskowej $PWDzamiast zastępowania poleceń i eliminując potrzebę tail: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX

@SiegeX: Zgadzam się, że to wszystko awkjest lepsze. Dołączyłem dłuższe polecenie, ponieważ chciałem mieć przykład tego, jak można zbudować łańcuch prostych poleceń, aby zrobić coś bardziej skomplikowanego. Zaktualizowałem odpowiedź, aby uwzględnić Twoje ulepszenie.
Steven D

-Pjest standardem ( Pdotyczy POSIX). Ale -hjest rozszerzeniem GNU (istnieje także w niektórych innych systemach, ale np. W OpenBSD jest niekompatybilny -P).
Gilles „SO- przestań być zły”

Możesz to zrobić bez użycia przełącznika --output = dostępność: df -h --output=avail . | tail -1
Floyd

„Możesz zoptymalizować swoje polecenie”. Nie całkiem. Uruchomienie obu potoków 10 000 razy (jak w time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) nie ujawnia żadnej znaczącej różnicy prędkości, co nie jest zadziwiające - wywoływanie tailnie jest drogie i awkoszczędza się przeskakiwania do końca danych wejściowych ... Mogła być różnica na PDP-11 ...
David Tonhofer

10

Jak o zrobieniu df -h .. Zapewni to dostępne wolne miejsce na partycji, w której znajduje się bieżący katalog roboczy.

Mały przykład:

 /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

W bajtach:

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

Czytelny dla człowieka:

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

lub

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

lub

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.