Script sortir file otomatis

Pisah File Masuk Berdasarkan Nama Pengguna & Jenis | Simpan ke HDD Berbeda


📋 Daftar Isi


⚙️ Fungsi & Cara Kerja

Skrip ini dibuat khusus untuk memproses file yang masuk ke folder /bot/ secara otomatis. Setiap pengguna memiliki folder sendiri, dan sistem akan memindahkan file ke Harddisk tujuan sesuai aturan yang ditetapkan (berbeda lokasi untuk Foto, Video, Dokumen).

Fitur Utama:

  • ✅ Membaca nama pengguna dari nama folder: /bot/faizal/ → User: faizal
  • ✅ Memisahkan jenis file: Foto, Video, Dokumen, Audio
  • ✅ Aturan Fleksibel: Beda user beda lokasi simpan (/mnt/hdd/admin, /mnt/hdd1/media, dll)
  • ✅ Otomatis masuk folder Default jika user belum ada aturannya
  • AMAN TIDAK TERTIMPA: Jika nama file sama, otomatis ditambah nomor urut _1, _2, dst.
  • ✅ Bersihkan folder kosong otomatis setelah diproses
  • ✅ Log lengkap siapa memasukkan file apa ke mana

🗺️ Skema Penyimpanan

📥 Struktur Masuk:

/bot/
├─ faizal/
│ ├─ liburan.jpg
│ ├─ tutorial.mp4
│ └─ laporan.pdf
└─ budi/
   └─ catatan.docx

📤 Hasil Keluar Sesuai Aturan:

✅ faizal/foto → /mnt/hdd/admin/liburan.jpg
✅ faizal/video → /mnt/hdd1/media/tiktok/tutorial.mp4
✅ faizal/dokumen → /mnt/hdd2/kuliah/faizal/laporan.pdf
✅ budi/dokumen → /mnt/hdd/bot_lainnya/budi/dokumen/catatan.docx (Karena belum ada aturan khusus)

📝 Kode Lengkap Skrip /opt/sortir_bot.sh

#!/bin/bash
# ============================================================
#  SKRIP SORTIR FILE BOT - MULTI USER (VERSI FINAL STABIL)
#  Dibuat: 01 Juni 2026 | Khusus Server Debian 13
# ============================================================

# 📁 FOLDER UTAMA TEMPAT FILE MASUK (Dibagi per User)
BOT_DIR="/bot"

# 🗂️ ATURAN TUJUAN: Format = "NAMA_USER:JENIS_FILE:LOKASI_TUJUAN"
ATURAN=(
    "faizal:foto:/mnt/hdd/admin"
    "faizal:video:/mnt/hdd1/media/tiktok"
    "faizal:dokumen:/mnt/hdd2/kuliah/faizal"
)

# 📌 DAFTAR EKSTENSI PER JENIS
EXT_FOTO="jpg jpeg png gif bmp webp heic raw svg"
EXT_VIDEO="mp4 avi mkv mov flv wmv webm mpeg mpg 3gp"
EXT_DOKUMEN="pdf doc docx xls xlsx ppt pptx txt odt csv rtf rar zip 7z"
EXT_AUDIO="mp3 wav flac ogg aac wma"

# 📂 LOKASI DEFAULT (Kalau User/Jenis belum ada di daftar ATURAN)
DEFAULT_TUJUAN="/mnt/hdd/bot_lainnya"

# 📋 FILE LOG
LOG="/var/log/sortir_bot.log"

# ============================================================
#            MULAI PROSES
# ============================================================

echo -e "\n=== MULAI PROSES SORTIR: $(date '+%d-%m-%Y %H:%M:%S') ===" >> "$LOG"

if [[ ! -d "$BOT_DIR" ]]; then
    echo "[ERROR] Folder utama $BOT_DIR tidak ditemukan!" >> "$LOG"
    exit 1
fi

for USER_DIR in "$BOT_DIR"/*/; do
    USER=$(basename "$USER_DIR")
    echo "[INFO] Memproses User: $USER" >> "$LOG"

    find "$USER_DIR" -type f -print0 | while IFS= read -r -d '' FILE; do
        NAMA=$(basename "$FILE")

        # Abaikan file tersembunyi / kosong
        if [[ "$NAMA" == .* || ! -s "$FILE" || "$NAMA" == *~ ]]; then continue; fi

        # Ambil ekstensi kecil
        EKST="${NAMA##*.}"
        EKST=$(echo "$EKST" | tr '[:upper:]' '[:lower:]')

        # Tentukan Jenis
        JENIS=""
        [[ " $EXT_FOTO " == *" $EKST "* ]] && JENIS="foto"
        [[ " $EXT_VIDEO " == *" $EKST "* ]] && JENIS="video"
        [[ " $EXT_DOKUMEN " == *" $EKST "* ]] && JENIS="dokumen"
        [[ " $EXT_AUDIO " == *" $EKST "* ]] && JENIS="audio"

        if [[ -z "$JENIS" ]]; then
            echo "[SKIP] $USER/$NAMA (Ekstensi .$EKST tidak dikenal)" >> "$LOG"
            continue
        fi

        # Cari Tujuan
        TUJUAN=""
        for BARIS in "${ATURAN[@]}"; do
            IFS=':' read -r R_USER R_JENIS R_TUJUAN <<< "$BARIS"
            if [[ "$R_USER" == "$USER" && "$R_JENIS" == "$JENIS" ]]; then
                TUJUAN="$R_TUJUAN"
                break
            fi
        done

        # Pakai Default kalau kosong
        if [[ -z "$TUJUAN" ]]; then
            TUJUAN="$DEFAULT_TUJUAN/$USER/$JENIS"
        fi

        # Buat Folder
        mkdir -p "$TUJUAN"

        # Cek Nama Duplikat
        DEST="$TUJUAN/$NAMA"
        if [[ -f "$DEST" ]]; then
            BASE_NAMA="${NAMA%.*}"; EKST_ASLI="${NAMA##*.}"; NO_URUT=1
            while [[ -f "$TUJUAN/${BASE_NAMA}_${NO_URUT}.${EKST_ASLI}" ]]; do ((NO_URUT++)); done
            DEST="$TUJUAN/${BASE_NAMA}_${NO_URUT}.${EKST_ASLI}"
        fi

        # Pindahkan File
        mv -n "$FILE" "$DEST"
        echo "[BERHASIL] $USER/$NAMA → $DEST" >> "$LOG"
    done
done

# Bersihkan Folder Kosong
find "$BOT_DIR" -mindepth 2 -type d -empty -delete
find "$BOT_DIR" -type d -empty -delete 2>/dev/null

echo "=== SELESAI PROSES: $(date '+%d-%m-%Y %H:%M:%S') ===" >> "$LOG"

🔧 Cara Pemasangan

  1. Buat file skrip: nano /opt/sortir_bot.sh
  2. Salin kode di atas, tempel dan simpan.
  3. Beri izin eksekusi: chmod +x /opt/sortir_bot.sh
  4. Sesuaikan bagian ATURAN dan DEFAULT_TUJUAN dengan alamat harddisk di server anda.

⏱️ Jadikan Layanan Otomatis (Cron)

Agar skrip berjalan sendiri memeriksa file baru setiap 5 menit:

crontab -e

Tambahkan baris berikut di baris paling bawah:

*/5 * * * * /opt/sortir_bot.sh > /dev/null 2>&1

📊 Cek Hasil & Log Aktivitas

Semua proses terekam rapi, untuk melihat riwayat pemindahan file:

tail -f /var/log/sortir_bot.log

➕ Menambah User Baru

Cukup tambahkan 1 baris di dalam variabel ATURAN sesuai format:

"nama_user_baru:foto:/mnt/hdd/tujuan/foto",
"nama_user_baru:video:/mnt/hdd/tujuan/video",
"nama_user_baru:dokumen:/mnt/hdd/tujuan/doc"

✅ SISTEM SORTIR OTOMATIS AKTIF & BERJALAN

Dibuat oleh: Admin Sistem | Tanggal: 01 Juni 2026