dir
Perintah daftar direktori Windows memiliki garis di bagian akhir yang menunjukkan jumlah total ruang yang diambil oleh file yang terdaftar. Misalnya, dir *.exe
menunjukkan semua .exe
file di direktori saat ini, ukurannya, dan jumlah total ukurannya. Saya ingin memiliki fungsi yang mirip dengan dir
alias saya di bash, tapi saya tidak yakin bagaimana melakukannya.
Saat ini, saya miliki alias dir='ls -FaGl'
di .bash_profile
pertunjukan saya
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
sebagai contoh. Mengambil jawaban dari pertanyaan ini :
dir | awk '{ total += $4 }; END { print total }'
yang memberi saya total, tetapi tidak mencetak daftar direktori itu sendiri. Apakah ada cara untuk mengubah ini menjadi skrip satu-liner atau shell sehingga saya bisa memberikan ls
argumen yang saya inginkan dir
dan mendapatkan daftar lengkap ditambah jumlah total? Sebagai contoh, saya ingin menjalankan dir -R *.jpg *.tif
untuk mendapatkan daftar dan ukuran total dari jenis file tersebut di semua subdirektori. Idealnya, akan lebih bagus jika saya bisa mendapatkan ukuran dari setiap subdirektori, tetapi ini tidak penting.
sumber
ls -lh
membantumu? Ini mencetak jumlah total di atas. Anda juga dapat menjalankandu -sh *.exe
untuk mendapatkan informasi penggunaan ruang disk dalam bentuk yang dapat dibaca manusia.ls -lh
yang dicetak, tapi itu tidak selalu terkait dengan apa yangawk
dihitung skrip di bawah ini, atau apa yang saya tambahkan dengan tangan. Kadang-kadang mendekati jumlah KB file dalam direktori, tetapi tampaknya tidak mengambil ukuran subdirektori yang berlaku. Saya akan berterima kasih jika Anda bisa mengarahkan saya ke penjelasan tentang apa sebenarnya angka itu ...ls -lh
tidak menunjukkan total ukuran dir yang menghitung kontennyaJawaban:
Fungsi berikut melakukan sebagian besar dari apa yang Anda minta:
... tapi itu tidak akan memberi Anda apa yang Anda minta
dir -R *.jpg *.tif
, karena itu bukan carals -R
kerjanya. Anda mungkin ingin bermain-main denganfind
utilitas untuk itu.sumber
dir
sudah menjadi nama GNU coreutil yang populer, saya lebih suka tidak menyebutkan fungsi seperti itu.Sudah ada perintah UNIX untuk ini:
du
Kerjakan saja:
Sesuai konvensi, Anda dapat menambahkan satu atau lebih jalur file atau direktori di akhir perintah.
-h
adalah ekstensi untuk mengubah ukuran menjadi format ramah-manusia,-a
memberi Anda ukuran "jelas" (ukuran file alih-alih penggunaan disk), dan-c
memberikan total pada akhirnya.sumber
du
memberikan penggunaan disk, bukan jumlah ukuran file.du -h
tidak menjumlahkan ukuran file yang diteruskan ke sana.du -h *.so
menunjukkan ukuran setiap file, tetapi bukan jumlah. Saya pikir yang Anda inginkan di sini adalahdu -hc *.so
(atau bahkandu -hc *.so | tail -1
). Tapi tentu saja, dia juga menginginkan daftar direktori.-a
berarti--all
. Pertimbangkan untuk menggunakan--apparent-size
Anda dapat gunakan
du -h -c directory|tail -1
Ini akan menghasilkan satu baris dengan penggunaan memori.
sumber
du -hs directory
jika Anda hanya menginginkan totalnya.Cukup cetak baris saat ini bahwa Anda menjumlahkan total:
sumber
dengan perl:
Ukuran semua file PDF yang tidak disembunyikan di direktori saat ini.
sumber
Menambahkan berikut ini ke .bash_profile atau .bashrc berfungsi untuk saya.
Sekarang ketika saya melakukan dir * .mp3 itu dilakukan secara rekursif dan mencetak total pada akhirnya. Anda dapat mengontrol berapa banyak kedalaman yang Anda inginkan dengan menambahkan parameter maxdepth ke find. Saya tahu menjalankan find dua kali bukan ide yang sangat efektif. Tetapi saya tidak bisa memikirkan cara yang lebih baik. Setidaknya itu menyelesaikan pekerjaan.
sumber
Menggunakan du dan pernyataan awk seperti yang disebutkan di atas akan memberikan apa yang Anda cari.
Contoh:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'
Ini akan mencantumkan semua file dalam folder Unduhan pengguna abc yang berakhiran .jpg dan mencetak jumlah semua file ini di akhir daftar.
sumber
Untuk mendapatkan keduanya, dir output dan perhitungan ukuran, tanpa menggunakan opsi yang diusulkan lainnya, Anda dapat menggunakan tee (1) dan memproses substitusi ...
sumber
tee
, hanyadir | awk '{print; total += $4}; END {print total}'
sumber
linux sum human readable sizes
dan apa yang saya cari.sumber