dapatkan perkiraan ukuran direktori (secara rekursif termasuk semua file dan sub-direktori)

10

Apakah ada cara untuk dengan cepat mendapatkan ukuran yang akurat untuk direktori (termasuk, secara rekursif, semua sub-direktori)? Saya tidak ingin ukuran subdirs, yang saya maksud adalah ukurannya harus dimasukkan secara rekursif dalam ukuran total yang dilaporkan.

Gagal itu, cara untuk mendapatkan ukuran perkiraan? Saya sedang memikirkan sesuatu dfyang menghasilkan respons cepat untuk seluruh sistem file, tetapi kali ini untuk direktori tertentu (dan itu adalah subdirektori).

Solusi menggunakan dutampaknya perlu waktu lama ketika diberi direktori berisi ribuan sub-dir.

Marcus Junius Brutus
sumber
Menggunakan duadalah satu-satunya metode yang saya ketahui. Masalahnya adalah bahwa data tersebar di seluruh hierarki sehingga perlu dihitung dengan alat untuk mendapatkan penghitungan.
slm

Jawaban:

15

Saya menemukan ini sangat berguna.

du -sm Directory

atau untuk mendapatkan rincian direktori di dalam

du -sm Directory/*

dan kemudian dengan semacam jika punya banyak subdir

du -sm Directory/* | sort -n 

Alasan saya menggunakan opsi -m adalah untuk memastikan saya mendapatkan output megabyte. Saya menemukan ini lebih mudah bagi saya untuk membandingkan secara visual (ketika saya tidak mendapatkan campuran unit misalnya membandingkan 999 KB dan 1MB vs 999000MB dan 1000000MB), manfaat tambahan adalah bahwa Anda dapat melewatkan output menjadi semacam.

Letakkan semuanya di latar belakang dan redirect output, itu akan membutuhkan waktu apa pun metode yang digunakan, itu adalah melintasi dari banyak file yang akan memakan waktu.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Catatan keluar semacam terbalik jadi yang besar adalah di awal. Tambahkan ini ke cron run setiap n mnt.

Kemudian dengan alias ducache, Anda memiliki penggunaan direktori yang cukup mutakhir.

export alias ducache='head -n 15 ~/cacheDu.log'
X Tian
sumber
@X Tian lihat komentar saya pada jawaban glenn jackman
Marcus Junius Brutus
Diterima, itu sebabnya saya menggunakan -m dan urutkan
X Tian
3
Ingat shopt -s dotglob, jika du -sm Directory/*tidak , tidak akan menghitung file / direktori tersembunyi.
Dmitry Grigoryev
@XTian maaf tapi saya tidak bisa begitu beberapa perintah tolong bantu.
Maveň ツ
Saya mendapatkannya dari sini
Maveň ツ
5
du -sh "$dir"

akan memberi Anda ringkasan ukuran total dalam output berformat "manusia".


Karena Anda mencari alternatif untuk du, saya mencoba find, tetapi persis sama:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .
glenn jackman
sumber
Terima kasih, saya menyadarinya tetapi dubutuh waktu terlalu lama karena ini menghasilkan hasil yang akurat. Saya berharap untuk alat / perintah yang menyediakan jawaban perkiraan cepat dan kotor.
Marcus Junius Brutus
Ada dftapi itu berfungsi pada keseluruhan sistem file.
glenn jackman
1

Anda mungkin tidak menyukai jawaban saya, tetapi saya pikir cara terbaik untuk melakukan apa yang Anda inginkan adalah menjalankan "du -s" di latar belakang secara teratur menggunakan cron dan menyimpan hasilnya dalam file. Kemudian ketika Anda menginginkan nilai perkiraan, gunakan nilai dari file. Anda harus memutuskan seberapa sering menjalankan du. Saya tidak melihat cara yang lebih cepat untuk mendapatkan nilai. Perintah du efisien untuk apa yang dilakukannya.

Satu-satunya cara Anda bisa melakukan ini dengan sangat cepat adalah membuat sistem file untuk direktori, lalu Anda akan mendapatkan jawaban yang Anda inginkan dengan sangat cepat.

Jika lebih cepat mengetahui segalanya dalam sistem file kecuali direktori Anda, Anda dapat menjalankan df untuk sistem file, du untuk segala sesuatu selain direktori Anda dan kurangi.

Robert Jacobs
sumber
0

Itu tidak persis sesuai dengan kebutuhan Anda (bukan cetak satu-baris) tetapi caranya lebih mudah daripada solusi lain:

du -a -h | sort -hr | head -2

Perintah ini akan memberi Anda ukuran direktori dan sub-direktori dan ukuran file atau sub-direktori terbesar pada direktori saat ini.

PS: Ini head -2dalam kasus sub-direktori mengambil semua tempat direktori saat ini dan mendengarkan sebelum saat ini.

Nodulaire
sumber