รับพื้นที่ว่างที่มีอยู่ในไดเรกทอรีปัจจุบันใน Bash


25

ฉันรู้df -hและpwdดูเหมือนว่าจะซับซ้อนเล็กน้อยสำหรับส่วนการจับคู่ regex ความคิดใด ๆ


1
คุณหมายถึงdu -hอะไร
jweyrich

คำตอบ:


45

เอาต์พุตสามารถทำการแยกวิเคราะห์ได้ง่ายขึ้นโดยใช้-Pตัวเลือกซึ่งจะทำให้มั่นใจได้ว่า:

  1. ข้อมูลเกี่ยวกับระบบไฟล์แต่ละระบบจะถูกพิมพ์บนบรรทัดเดียวเสมอ อุปกรณ์เมานต์จะไม่ถูกวางบนเส้นด้วยตัวเอง ซึ่งหมายความว่าหากชื่ออุปกรณ์เชื่อมต่อมีความยาวมากกว่า 20 ตัวอักษร (เช่นสำหรับเครือข่ายบางตัว) คอลัมน์จะถูกจัดแนวให้ไม่ตรง

สิ่งนี้ทำให้การหาพื้นที่ว่างให้ง่ายขึ้น:

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

( -hใช้เมกะไบต์กิกะไบต์และอื่น ๆ หากระบบของคุณไม่มีให้ใช้-kเป็นกิโลไบต์เท่านั้น)

ถ้าเราผ่านdfเส้นทางมันจะกลับไป 2 แถว: แถวส่วนหัวแล้วข้อมูลเกี่ยวกับระบบไฟล์ที่มีเส้นทาง เราสามารถใช้หางเพื่อคว้าเฉพาะแถวที่สอง เรารู้ว่าพื้นที่ที่มีอยู่ในคอลัมน์ที่ 4 awkเพื่อให้เราคว้าที่ว่าด้วย ทั้งหมดนี้สามารถทำได้ด้วยawk:

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

หรือชุดอื่น ๆ ของฟิลเตอร์


คุณสามารถปรับคำสั่งของคุณให้เหมาะสมโดยใช้ตัวแปรสภาพแวดล้อม$PWDแทนการใช้การทดแทนคำสั่งและลบความต้องการหาง: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX

@SiegeX: ฉันเห็นด้วยที่จะทำทุกอย่างให้awkดีขึ้น ฉันรวมคำสั่งที่ยาวกว่าเพราะฉันต้องการมีตัวอย่างว่าจะสร้างคำสั่งแบบง่าย ๆ เพื่อทำสิ่งที่ซับซ้อนได้อย่างไร ฉันได้อัปเดตคำตอบเพื่อรวมการปรับปรุงของคุณแล้ว
Steven D

-Pเป็นมาตรฐาน ( Pสำหรับ POSIX) แต่-hเป็นส่วนขยายของ GNU (มีอยู่ในระบบอื่นบางระบบ แต่เช่นใน OpenBSD มันเข้ากันไม่ได้-P)
Gilles 'หยุดความชั่วร้าย'

คุณสามารถทำได้โดยไม่ใช้สวิตช์ --output = avail: df -h --output=avail . | tail -1
Floyd

"คุณสามารถเพิ่มประสิทธิภาพคำสั่งของคุณ" ไม่ได้จริงๆ การใช้งานท่อทั้งสอง 10,000 ครั้ง (เหมือนใน time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) เผยให้เห็นความแตกต่างที่มีความหมายในความเร็วซึ่งไม่น่าประหลาดใจ - การเรียกใช้tailไม่แพงและawkจะงดเว้นที่จะข้ามไปยังจุดสิ้นสุดของอินพุต ... อาจมีความแตกต่างบน PDP-11 ...
David Tonhofer

10

df -h .วิธีการเกี่ยวกับการทำ สิ่งนี้จะทำให้คุณมีพื้นที่ว่างของพาร์ติชันไดเรกทอรีการทำงานปัจจุบันของคุณอยู่

ตัวอย่างเล็ก ๆ :

 /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

ในหน่วยไบต์:

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

คนอ่านได้:

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

หรือ

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

หรือ

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.