Manajemen Video Rekursif: Cari & Pindah Otomatis

Rapikan folder proyek Anda dalam hitungan detik dengan skrip Bun Glob

Pernahkah kamu mendapati folder proyekmu berantakan dengan file video yang tersebar di belasan subfolder? Mungkin hasil rekaman dari berbagai kamera, video klip dari internet, atau arsip proyek lama yang menumpuk. Alih-alih memindahkannya secara manual satu per satu—yang melelahkan dan berisiko salah klik—kita bisa memanfaatkan Bun Glob untuk merapikannya dalam hitungan detik.

Artikel ini akan memandu Anda membuat skrip sederhana namun cerdas untuk memindai semua file video secara rekursif dari sebuah direktori dan memindahkannya ke satu folder pusat. Metode ini tidak hanya menghemat waktu, tetapi juga mencegah kesalahan manusia dan menjaga struktur folder tetap rapi untuk proses selanjutnya, seperti konversi atau pengarsipan.

Tampilan terminal Linux dengan proses automasi folder menggunakan Bun dan Glob untuk memindahkan file video

Di balik layar, skrip ini memanfaatkan kemampuan scanning rekursif dari Glob yang disediakan oleh Bun—sebuah runtime JavaScript modern yang sangat cepat. Dengan hanya beberapa baris kode, kita bisa menangani ratusan bahkan ribuan file video tanpa membebani sistem. Mari kita bedah skripnya secara mendalam.

Skrip Bun: pindah-video.ts

Skrip ini dirancang cerdas untuk mengabaikan folder tujuan agar tidak terjadi pengulangan (loop) saat pemindahan berlangsung. Dengan kata lain, jika ada file video yang sudah berada di folder tujuan, skrip akan melewatinya secara otomatis.

Berikut adalah kode lengkapnya. Anda bisa menyimpannya sebagai pindah-video.ts dan menjalankannya dengan Bun.

import { Glob } from "bun";
import { renameSync, mkdirSync, existsSync } from "node:fs";
import path from "node:path";
// Konfigurasi folder spesifik
const sourceDir = "bakxoje";
const targetDir = "bakxoje/pidio";
const videoExtensions = ["mp4", "mkv", "avi", "mov", "flv", "wmv", "webm"];
// 1. Buat folder tujuan jika belum ada
if (!existsSync(targetDir)) {
 mkdirSync(targetDir, { recursive: true });
}
// 2. Scan semua video secara rekursif
const glob = new Glob(`**/*.{${videoExtensions.join(",")}}`);
const absoluteTargetDir = path.resolve(targetDir);
console.log(`🚀 Mencari video di dalam /${sourceDir}...`);
let count = 0;
for (const file of glob.scanSync(sourceDir)) {
 const fullPath = path.resolve(sourceDir, file);
 const fileName = path.basename(file);
 const destination = path.resolve(targetDir, fileName);
 // Hindari memindah file yang sudah ada di folder tujuan
 if (fullPath.startsWith(absoluteTargetDir)) continue;
 try {
 renameSync(fullPath, destination);
 console.log(`[OK] Dipindah: ${fileName}`);
 count++;
 } catch (err) {
 console.error(`[Gagal] ${fileName}: ${err.message}`);
 }
}
console.log(`\n✨ Selesai! ${count} video dipindahkan ke ${targetDir}`);

Penjelasan Kode:

  • Import modul: Mengimpor Glob dari Bun untuk pencarian file, serta fungsi renameSync, mkdirSync, dan existsSync dari Node.js untuk operasi file.
  • Konfigurasi: Tentukan direktori sumber (sourceDir), direktori tujuan (targetDir), dan daftar ekstensi video yang akan dipindai.
  • Buat folder tujuan: Jika folder tujuan belum ada, skrip akan membuatnya secara otomatis dengan { recursive: true }.
  • Scan rekursif: Menggunakan Glob dengan pola **/*.{ext1,ext2} untuk mencari semua file dengan ekstensi yang ditentukan di semua subfolder.
  • Perulangan dan pemindahan: Untuk setiap file yang ditemukan, skrip memeriksa apakah file tersebut sudah berada di folder tujuan. Jika tidak, file dipindahkan menggunakan renameSync.
  • Logging: Menampilkan progres pemindahan dan jumlah total file yang berhasil dipindahkan.

Perhatikan bahwa renameSync bekerja secara instan jika sumber dan tujuan berada di partisi yang sama, karena hanya mengubah pointer file di sistem berkas—tanpa menyalin data secara fisik. Ini membuat proses sangat cepat dan efisien.

Cara Menjalankan

Menjalankan skrip ini sangat mudah. Pastikan Anda sudah menginstal Bun di sistem Anda. Jika belum, kunjungi situs resmi Bun untuk panduan instalasi.

Cukup buka terminal Konsole (atau terminal favorit Anda) di CachyOS atau distribusi Linux lainnya, pastikan berada di direktori yang tepat, lalu jalankan perintah berikut:

bun run pindah-video.ts

Skrip akan mulai memindai folder bakxoje dan memindahkan semua file video ke bakxoje/pidio. Anda akan melihat log progres di terminal seperti ini:

🚀 Mencari video di dalam /bakxoje...
[OK] Dipindah: video-1.mp4
[OK] Dipindah: clip_02.mkv
[OK] Dipindah: project_final.mov
✨ Selesai! 64 video dipindahkan ke bakxoje/pidio

Jika ada file dengan nama yang sama di folder tujuan, skrip akan menimpa file tersebut karena menggunakan renameSync tanpa pengecekan nama duplikat. Untuk menghindari hal ini, Anda bisa menambahkan logika penamaan ulang (misalnya menambahkan timestamp) sebelum memindahkan.

Keunggulan Metode Ini

Mengapa menggunakan skrip ini dibandingkan dengan cara manual atau file manager biasa? Berikut beberapa keunggulan utamanya:

  • Efisiensi I/O: Menggunakan renameSync yang hanya mengubah pointer file di sistem berkas (instan di partisi yang sama). Tidak ada proses copy yang memakan waktu dan ruang disk.
  • Keamanan Folder: Ada pengecekan fullPath.startsWith(absoluteTargetDir) sehingga skrip tidak akan mencoba memindah file yang sudah berada di folder target. Ini mencegah loop tak terhingga dan menjaga integritas data.
  • Skalabilitas: Sangat ringan dijalankan di laptop i5-7200U tanpa membebani sistem sama sekali. Bahkan untuk ribuan file, skrip berjalan dalam hitungan detik.
  • Fleksibilitas Ekstensi: Anda bisa dengan mudah menambahkan atau menghapus ekstensi video di array videoExtensions sesuai kebutuhan.
  • Logging Jelas: Setiap langkah dicatat di terminal, sehingga Anda tahu persis file mana yang berhasil dipindah dan mana yang gagal.

Dengan folder yang sudah rapi, kamu sekarang siap untuk melangkah ke tahap berikutnya: Konversi WebM untuk performa web yang lebih ngebut!

Analisis 5W+1H
Analisis 5W + 1H:
  • What: Skrip untuk memindai file video secara rekursif dan memindahkannya ke satu folder pusat.
  • Who: Pengguna Linux/CachyOS yang ingin merapikan folder bakxoje.
  • Where: Berjalan di lingkungan lokal (ThinkPad L570).
  • When: Digunakan saat folder sudah terlalu berantakan atau sebelum proses konversi masal.
  • Why: Karena memindahkan 64 video secara manual sangat tidak efisien.
  • How: Menggunakan pencarian pola glob **/*.{ext} dan fungsi rename sinkron.

Dengan pendekatan 5W+1H, kita bisa melihat bahwa skrip ini adalah solusi praktis untuk masalah manajemen file yang sering dihadapi oleh kreator konten, pengelola arsip, dan pengembang. Tidak hanya menjawab bagaimana cara melakukannya, tetapi juga mengapa metode ini lebih unggul daripada pendekatan manual.

Modifikasi dan Ekstensi Skrip

Skrip dasar di atas bisa dimodifikasi untuk berbagai kebutuhan. Berikut beberapa ide pengembangan:

  • Filter berdasarkan ukuran file – Tambahkan pengecekan statSync untuk memindahkan hanya file di atas atau di bawah ukuran tertentu.
  • Penamaan ulang otomatis – Jika ada konflik nama, tambahkan timestamp atau angka increment ke nama file tujuan.
  • Log file – Simpan daftar file yang dipindahkan ke file .log untuk referensi di masa mendatang.
  • Pengecualian folder – Tambahkan daftar folder yang tidak ingin dipindai (misalnya node_modules atau .git).
  • Integrasi dengan ffmpeg – Setelah file terkumpul, jalankan konversi otomatis ke format yang diinginkan.

Dengan sedikit kreativitas, skrip ini bisa menjadi alat andalan untuk mengelola arsip video Anda. Jangan ragu untuk bereksperimen!


Dengan skrip sederhana ini, merapikan folder video bukan lagi pekerjaan rumah yang melelahkan. Coba sendiri dan rasakan perbedaannya!