Rumah > Artikel > pembangunan bahagian belakang > Isih Item dalam Direktori mengikut Saiz Menurun Menggunakan Python, PowerShell, C# atau Go
Atur cara mudah untuk mengisih semua item dalam direktori, sama ada fail atau folder, mengikut saiz menurun.
Mengisih item dalam direktori mengikut saiz menurun tidaklah semudah yang anda fikirkan, sama ada anda menggunakan pelayar fail grafik atau baris arahan, kerana sistem pengendalian tidak mengira jumlah saiz kandungan direktori semasa menyemak imbas direktori pokok. Artikel ini menawarkan program kerja yang lengkap untuk mengatasinya pada kebanyakan sistem pengendalian.
Mungkin anda akan mendapati perkara berikut biasa:
Sama ada untuk kerja atau projek peribadi, saya suka mengatur aset digital saya dengan mencipta direktori induk, katakan satu yang dipanggil Projek dan menyimpan semua kandungan untuk projek individu di sana. Jika projek kecil dan tidak melibatkan banyak kandungan, saya akan menggunakan satu fail, biasanya fail teks. Jika projek melibatkan lebih banyak kandungan, sebut fail teks serta beberapa tangkapan skrin, saya akan mencipta folder untuk projek itu dan meletakkan semua aset yang berkaitan di sana. Jadi, dari perspektif saya, fail teks tunggal dan folder adalah setara dalam erti kata masing-masing mewakili projek. Satu-satunya perbezaan ialah folder itu mewakili projek yang lebih besar, satu dengan lebih banyak bahan.
Kadang-kadang saya ingin melihat projek mana yang terbesar pada masa ini, yang mempunyai paling banyak barangan. Ini biasanya berlaku kerana saya telah lama tidak bekerja di kawasan tertentu, jadi apabila saya kembali kepadanya, saya ingin melihat projek mana yang mempunyai kandungan paling banyak. Alasan saya ialah projek dengan kandungan terbanyak mestilah yang paling lengkap, dan oleh itu mungkin projek yang harus saya mulakan dahulu, kerana ia akan menjadi paling mudah untuk diselesaikan.
Sebagai contoh, pertimbangkan direktori dengan kandungan berikut:
Name | Type | Size |
---|---|---|
Huge Project.txt | File | 2.6KB |
Larger Project | Folder | 1.07KB |
0 - Tiny Project | Folder | 0KB |
Basic Project.txt | File | 0.36KB |
Big Project.txt | File | 2.11KB |
Isih direktori di atas mengikut saiz menurun akan menghasilkan:
Huge Project.txt 2.6KB Big Project.txt 2.11KB Larger Project 1.07KB Basic Project.txt 0.36KB 0 - Tiny Project 0KB
Walau bagaimanapun, ini bukan apa yang kami dapat apabila kami mengklik pengepala lajur Saiz dalam penyemak imbas fail grafik pada Windows, Mac dan Linux.
Menggunakan baris arahan menyediakan output yang agak hampir dengan yang diingini, tetapi masih tidak betul sepenuhnya:
dir /b /o:-d
Output:
Larger Project 0 - Tiny Project Huge Project.txt Big Project.txt Basic Project.txt
Terdapat pelbagai kombinasi perintah untuk pengisihan kandungan direktori pada sistem berasaskan UNIX seperti Mac dan Linux. Kebanyakannya melibatkan penggunaan du, sort, dan ls. Contoh lain yang saya temui dalam talian juga turut memasukkan carian dan grep ke dalam campuran.
Inilah yang saya cuba:
du -a -h --max-depth=1 | sort -hr
Output:
32K . 8.0K ./Larger Project 8.0K ./0 - Tiny Project 4.0K ./Huge Project.txt 4.0K ./Big Project.txt 4.0K ./Basic Project.txt
Menggunakan suis -S pada arahan ls sepatutnya melakukan apa yang saya cari, mengisih item mengikut saiz menurun.
ls -S
Output:
'0 - Tiny Project' 'Larger Project' 'Huge Project.txt' 'A - Big Project.txt' 'Basic Project.txt'
Output masih dimatikan. Saya cuba menambah suis -l (panjang).
ls -lS
Output:
total 20 drwx---r-x 2 admin admin 4096 Sep 20 21:49 '0 - Tiny Project' drwx---r-x 2 admin admin 4096 Sep 20 21:49 'Larger Project' -rw-rw-r-- 1 admin admin 2667 Sep 20 21:49 'Huge Project.txt' -rw-rw-r-- 1 admin admin 2164 Sep 20 21:49 'Big Project.txt' -rw-rw-r-- 1 admin admin 368 Sep 20 21:49 'Basic Project.txt'
Keluaran termasuk lebih terperinci, seperti yang dijangkakan, tetapi susunan isihan adalah sama seperti sebelumnya.
Walaupun output pelbagai arahan tidak memberikan output yang diingini, ia menyerlahkan punca masalah. Apabila menyemak imbas pepohon direktori, sistem pengendalian tidak berulang ke dalam folder untuk mengira jumlah saiz kandungannya. Sebaliknya, mereka menganggap semua folder sebagai mempunyai saiz tetap yang sama. Biasanya ini ialah saiz blok minimum sistem fail, biasanya 4096 bait, 4KB.
Mesti ada sekurang-kurangnya sedozen alat percuma di luar sana yang menyelesaikan masalah ini, tetapi secara jujur, saya tidak melihat pun. Menulis skrip/program yang melakukan perkara yang sama dan kemudian berkongsi di sini terasa seperti lebih mudah, melibatkan kurang kembung, semoga berguna untuk orang lain, dan pastinya lebih menyeronokkan.
Saya sudah cukup lama melamun. Inilah kodnya:
Huge Project.txt 2.6KB Big Project.txt 2.11KB Larger Project 1.07KB Basic Project.txt 0.36KB 0 - Tiny Project 0KB
Larger Project 0 - Tiny Project Huge Project.txt Big Project.txt Basic Project.txt
32K . 8.0K ./Larger Project 8.0K ./0 - Tiny Project 4.0K ./Huge Project.txt 4.0K ./Big Project.txt 4.0K ./Basic Project.txt
'0 - Tiny Project' 'Larger Project' 'Huge Project.txt' 'A - Big Project.txt' 'Basic Project.txt'
Terdapat beberapa perbezaan kecil antara empat pelaksanaan, tetapi pendekatan umum yang digunakan untuk keempat-empat adalah sama:
Pada baris arahan, lalukan laluan ke direktori yang anda ingin isikan sebagai parameter pertama. Saya tidak akan menyenaraikan semua contoh yang mungkin, tetapi berikut ialah pasangan, dengan mengandaikan anda telah menyalin kod dan menyimpannya sebagai nama fail dir_desc, singkatan untuk "direktori menurun", serta sambungan fail yang sesuai:
Menggunakan Python pada Mac atau Linux:
python3 dir_desc.py
Menggunakan PowerShell pada Windows:
powershell -f dir_desc.ps1
Saya mengalihkan pendekatan asal saya dalam Python kepada beberapa bahasa lain, supaya terdapat sekurang-kurangnya satu versi yang harus berfungsi pada setiap tiga sistem pengendalian utama:
Dan itu sahaja. Satu lagi yak, dicukur. Saya harap anda mendapati ini berguna.
Atas ialah kandungan terperinci Isih Item dalam Direktori mengikut Saiz Menurun Menggunakan Python, PowerShell, C# atau Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!