Dapatkan ruang kosong yang tersedia di direktori saat ini di Bash


25

Saya tahu df -hdan pwd, tetapi tampaknya sedikit rumit untuk bagian pencocokan regex. Ada ide?


1
Apakah maksud Anda du -h?
jweyrich

Jawaban:


45

Output dapat dibuat sedikit lebih mudah untuk diurai dengan menggunakan -Popsi yang akan memastikan bahwa:

  1. Informasi tentang setiap sistem file selalu dicetak tepat pada satu baris; perangkat mount tidak pernah diletakkan pada garis dengan sendirinya. Ini berarti bahwa jika nama perangkat pemasangan lebih dari 20 karakter (mis., Untuk beberapa pemasangan jaringan), kolom tidak selaras.

Ini membuatnya lebih mudah untuk mendapatkan ruang kosong yang tersedia:

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

( -hmenggunakan megabita, gigabita dan sebagainya. Jika sistem Anda tidak memilikinya, gunakan -kuntuk kilobyte saja.)

Jika kita melewati dfjalur, itu hanya akan mengembalikan 2 baris: baris header dan kemudian data tentang sistem file yang berisi jalur. Kita bisa menggunakan ekor untuk mengambil hanya baris kedua. Kami tahu bahwa ruang yang tersedia ada di kolom ke-4, jadi kami ambil dengan awk. Ini semua bisa dilakukan dengan awk:

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

atau banyak set filter lainnya .


Anda dapat mengoptimalkan perintah Anda dengan menggunakan variabel lingkungan $PWDalih-alih menggunakan substitusi perintah dan menghilangkan kebutuhan untuk ekor: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX

@ SiegeX: Saya setuju melakukan semuanya awklebih baik. Saya memasukkan perintah yang lebih panjang karena saya ingin memiliki contoh bagaimana seseorang dapat membangun rangkaian perintah sederhana untuk melakukan sesuatu yang lebih rumit. Saya telah memperbarui jawaban untuk menyertakan peningkatan Anda.
Steven D

-Padalah standar ( Puntuk POSIX). Tetapi -hekstensi GNU (juga ada pada beberapa sistem lain, tetapi misalnya pada OpenBSD tidak kompatibel dengan -P).
Gilles 'SO- stop being evil'

Anda dapat melakukan ini tanpa keluar dengan menggunakan --output = avail switch: df -h --output=avail . | tail -1
Floyd

"Anda dapat mengoptimalkan perintah Anda". Tidak juga. Menjalankan kedua pipa 10'000 kali (seperti dalam time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) mengungkapkan tidak ada perbedaan berarti dalam kecepatan, yang tidak mengejutkan - memohon tailtidak mahal dan awkakan terhindar untuk melompat ke akhir input ... Mungkin ada perbedaan pada PDP-11 ...
David Tonhofer

10

Bagaimana dengan melakukan df -h .. Ini akan memberi Anda ruang kosong yang tersedia dari partisi tempat direktori kerja Anda saat ini.

Contoh kecil:

 /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

Dalam byte:

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

Dapat dibaca manusia:

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

atau

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

atau

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.