GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan ukuran direktori sebenarnya (keluar dari du)?

Beberapa versi du mendukung argumen --apparent-size untuk menunjukkan ukuran yang jelas alih-alih penggunaan disk. Jadi perintah Anda adalah:

du -hs --apparent-size

Dari halaman manual untuk du yang disertakan dengan Ubuntu 12.04 LTS:

--apparent-size
      print apparent sizes,  rather  than  disk  usage;  although  the
      apparent  size is usually smaller, it may be larger due to holes
      in (`sparse') files, internal  fragmentation,  indirect  blocks,
      and the like

Berikut adalah skrip yang menampilkan ukuran direktori yang dapat dibaca manusia menggunakan alat standar Unix (POSIX).

#!/bin/sh
find ${1:-.} -type f -exec ls -lnq {} \+ | awk '
BEGIN {sum=0} # initialization for clarity and safety
function pp() {
  u="+Ki+Mi+Gi+Ti+Pi+Ei";
  split(u,unit,"+");
  v=sum;
  for(i=1;i<7;i++) {
    if(v<1024) break;
    v/=1024;
  }
  printf("%.3f %sB\n", v, unit[i]);
}
{sum+=$5}
END{pp()}'

misalnya:

$ ds ~        
72.891 GiB

Dengan asumsi Anda memiliki du dari GNU coreutils, perintah ini harus menghitung ukuran total yang terlihat dari jumlah file reguler yang berubah-ubah di dalam direktori tanpa batasan jumlah file yang berubah-ubah:

find . -type f -print0 | du -scb --files0-from=- | tail -n 1

Tambahkan -l opsi untuk du jika ada beberapa file hardlink di dalamnya, dan Anda ingin menghitung setiap hardlink secara terpisah (secara default du menghitung beberapa hardlink hanya sekali).

Perbedaan paling penting dengan du -sb biasa adalah du rekursif itu juga menghitung ukuran direktori, yang dilaporkan berbeda oleh sistem file yang berbeda; untuk menghindari ini, find perintah digunakan untuk meneruskan hanya file biasa ke du . Perbedaan lainnya adalah bahwa symlink diabaikan (jika harus dihitung, find perintah harus disesuaikan).

Perintah ini juga akan menghabiskan lebih banyak memori daripada du -sb biasa , karena menggunakan --files0-from=FILE membuat du menyimpan perangkat dan nomor inode dari semua file yang diproses, berbeda dengan perilaku default yang hanya mengingat file dengan lebih dari satu tautan keras. (Ini bukan masalah jika -l opsi digunakan untuk menghitung hardlink berkali-kali, karena satu-satunya alasan untuk menyimpan perangkat dan nomor inode adalah untuk melewati file hardlink yang telah diproses.)

Jika Anda ingin mendapatkan representasi ukuran total yang dapat dibaca manusia, cukup tambahkan -h opsi (ini berfungsi karena du dipanggil hanya sekali dan menghitung ukuran total itu sendiri, tidak seperti beberapa jawaban lain yang disarankan):

find . -type f -print0 | du -scbh --files0-from=- | tail -n 1

atau (jika Anda khawatir tentang beberapa efek dari -b kemudian diganti oleh -h )

find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1

Linux
  1. Bagaimana cara saya secara terprogram mendapatkan ruang disk kosong untuk direktori di Linux

  2. Cara mendapatkan semua file yang melebihi ukuran tertentu dan menghapusnya

  3. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  1. Bagaimana Cara Mendapatkan Hitungan File Dalam Direktori Menggunakan Baris Perintah?

  2. Bagaimana saya bisa melihat ukuran file dan direktori di linux?

  3. Bagaimana cara mendapatkan direktori absolut dari sebuah file di bash?

  1. Linux – Bagaimana Menggabungkan Pohon Dengan Ukuran Direktori?

  2. Cara mendapatkan ukuran direktori di Linux

  3. Bagaimana saya bisa mendaftar (ls) 5 file terakhir yang dimodifikasi dalam direktori?