Pekerjaan di depan terminal sering kali berupa rutinitas berkas: mencari tahu berkas mana yang memakan ruang, menyalin laporan ke folder arsip, atau membereskan folder unduhan yang penuh sampah. Perintah bawaan sistem operasi bisa melakukan semuanya, tetapi gabungan perintah tersebut sulit diingat, berbeda antar sistem operasi, dan berbahaya ketika dijalankan pada berkas yang salah. Pada proyek ini kita membangun filetool, sebuah CLI pengelola file buatan sendiri yang dibangun dengan Python murni dari standard library.

Apa yang Kita Bangun #

filetool menerima subperintah bergaya git, sehingga setiap operasi file memiliki nama yang jelas dan bantuan yang dibangkitkan otomatis oleh module argparse. Delapan subperintah berikut akan siap pada akhir proyek:

  • daftar — tampilkan isi direktori, dengan format panjang opsional
  • info — tampilkan metadata sebuah berkas atau direktori
  • cari — telusuri berkas berdasarkan pola glob
  • salin dan pindahkan — operasi penyalinan dan pemindahan yang menolak menimpa
  • hapus — penghapusan yang menuntut konfirmasi eksplisit dan dapat dialihkan ke folder sampah
  • ukuran — total ukuran rekursif gaya du
  • organisasi — berkas berpindah ke folder per ekstensi, selalu bisa dipratinjau lewat --dry-run

Proyek disusun menjadi empat bagian yang saling menumpuk; main.py pada setiap bagian adalah versi lengkap dari tahap tersebut dan dapat dijalankan langsung:

BagianFokusBekal utama
Bagian 1Argumen command line dan subperintahChapter Membuat CLI dengan argparse
Bagian 2Operasi file dan pola amanChapter Filesystem Automation
Bagian 3Konfigurasi dan error handlingChapter Environment Variables dan Konfigurasi dengan TOML, JSON, dan YAML
Bagian 4Testing dan distribusiSection Testing dan Code Quality serta Packaging dan Deployment

Kontrak Perintah dan Exit Code #

filetool adalah alat yang dirancang untuk dirantai di skrip, sehingga setiap pemanggilan mengembalikan exit code yang berarti:

Exit codeArtiContoh pemicu
0suksesfiletool daftar files berhasil
1galat runtime atau penolakanberkas tidak ditemukan, izin ditolak, hapus tanpa --ya
2galat penggunaanargparse menolak subperintah yang tidak dikenal

Pesan normal ditulis ke stdout, sedangkan pesan galat ditulis ke stderr. Pemisahan dua jalur keluaran ini memungkinkan keluaran filetool disaring dengan grep tanpa tercemar pesan galat.

Struktur Proyek #

Satu berkas program utama tumbuh secara kumulatif, ditambah konfigurasi dan berkas testing pada bagian akhir:

text
cli-pengelola-file/
├── _index.md
├── bagian-1-argumen-command-line/
│   ├── index.md
│   └── main.py
├── bagian-2-operasi-file/
│   ├── index.md
│   └── main.py
├── bagian-3-konfigurasi-dan-error-handling/
│   ├── index.md
│   ├── main.py
│   └── config.json
└── bagian-4-testing-dan-distribusi/
    ├── index.md
    ├── pyproject.toml
    ├── main.py
    └── test_main.py

Seluruh kode pada setiap bagian diuji nyata dengan Python 3.12, dan setiap blok keluaran pada halaman berikutnya adalah transkrip asli dari eksekusi program, bukan hasil rekaan. Berkas sumber setiap tahap tersedia pada bagian Berkas Sumber di akhir masing-masing halaman, sehingga kita bisa membandingkan perkembangan main.py antar bagian secara berdampingan.

Mari kita mulai dari kerangka argumennya.