Pisah File Masuk Berdasarkan Nama Pengguna & Jenis | Simpan ke HDD Berbeda
📋 Daftar Isi
- Fungsi & Cara Kerja
- Skema Penyimpanan
- Kode Lengkap Skrip
- Cara Pemasangan
- Jadikan Otomatis (Cron)
- Cek Hasil & Log
- Menambah User Baru
⚙️ 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
├─ 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)
✅ 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"
# ============================================================
# 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
- Buat file skrip:
nano /opt/sortir_bot.sh - Salin kode di atas, tempel dan simpan.
- Beri izin eksekusi:
chmod +x /opt/sortir_bot.sh - Sesuaikan bagian
ATURANdanDEFAULT_TUJUANdengan 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"
"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