Jawaban:
Output dapat dibuat sedikit lebih mudah untuk diurai dengan menggunakan -P
opsi yang akan memastikan bahwa:
- 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}'
( -h
menggunakan megabita, gigabita dan sebagainya. Jika sistem Anda tidak memilikinya, gunakan -k
untuk kilobyte saja.)
Jika kita melewati df
jalur, 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 .
$PWD
alih-alih menggunakan substitusi perintah dan menghilangkan kebutuhan untuk ekor: df -Ph $PWD | awk 'NR==2{print $4}'
awk
lebih 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.
-P
adalah standar ( P
untuk POSIX). Tetapi -h
ekstensi GNU (juga ada pada beberapa sistem lain, tetapi misalnya pada OpenBSD tidak kompatibel dengan -P
).
df -h --output=avail . | tail -1
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 tail
tidak mahal dan awk
akan terhindar untuk melompat ke akhir input ... Mungkin ada perbedaan pada PDP-11 ...
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
du -h
?