Saya memiliki direktori dengan banyak foto di dalamnya. Secara khusus, du -sh --apparent-size /path/to/myfolder
beri saya 331G. Bagus sekali. Tetapi sekarang saya ingin mendapatkan daftar yang dikelompokkan berdasarkan bulan, misalnya sesuatu seperti ini:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
Apakah ada cara (masuk akal) untuk melakukan ini dengan linux builtin, atau haruskah saya menulis utilitas Python sendiri untuk melakukannya?
shell
files
disk-usage
Wayne Werner
sumber
sumber
Jawaban:
Di linux, coba:
Bagaimana itu bekerja
find /my/path
Ini mencari file di dalam / my / path.
-maxdepth 1
Ini memberitahu
find
untuk tidak melihat ke subdirektori. (Jika Anda ingin pencarian rekursif, maka abaikan opsi ini.)-type f
Ini memberitahu
find
untuk membatasi pencarian ke file biasa.-printf '%TY-%Tm %s\n'
Ini memberitahu
find
untuk mencetak tahun-bulan diikuti oleh ukuran dalam byte untuk setiap file.Karena kami tidak menggunakannya, nama-nama file yang ditemukan tidak dicetak.
b[$1]+=$2
Untuk setiap file yang ditemukan, kami menambahkan jumlah byte-nya, ditemukan dari kolom 2, ke jumlah yang kombinasi tahun-tahun dalam array asosiatif
b
.END{for (date in b) print date, b[date]}
Setelah kami memproses semua hasil dari
find
, kami mencetak hasilnya.sort
Ini mengurutkan hasil dalam urutan tanggal.
Versi beberapa baris
Bagi mereka yang lebih suka kode mereka tersebar di beberapa baris:
Contoh
Mari kita pertimbangkan direktori dengan file-file ini:
Output dari perintah kami adalah:
Perbaikan
Jika kita menginginkan output dalam mebibytes (MiB) alih-alih byte, kita dapat mengonversi unit-unit seperti ini:
Kita masih bisa lebih mengontrol format output dengan menggunakan
printf
. Di sini, untuk menjaga hanya satu digit setelah titik desimal, kami memformat ukurannya dengan%5.1f
:sumber
printf "%s %9d\n", date, b[date]
alih-alihprint date, b[date]
menambahkan bantalan ruang ke kolom keduaprintf
.find
dukungan itu,-maxdepth
Anda mungkin memiliki[g]awk
dukungan ituPROC_INFO["sorted_in"]="@ind_str_asc"