Bash Scripting #5: Fungsi Rekursif dan Pengolahan File

Table of Contents

Pendahuluan

Setelah membahas fungsi dalam Bash, kini kita akan mendalami fungsi rekursif dan pengolahan file lebih lanjut dalam Bash scripting.

Banyak tugas otomatisasi melibatkan pengolahan file dalam jumlah besar, misalnya:
🔹 Membaca dan menulis file secara otomatis.
🔹 Memproses banyak file dalam direktori atau sub-direktori.
🔹 Menggunakan fungsi rekursif untuk menangani data bertingkat.

Dengan teknik ini, Bash dapat digunakan untuk pemrosesan file yang lebih kompleks dan dinamis. 🚀


1️⃣ Fungsi Rekursif dalam Bash

Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Dalam Bash, ini berguna untuk memproses file dalam banyak sub-folder atau mengulang tugas tertentu hingga kondisi terpenuhi.

Contoh: Fungsi Rekursif untuk Mencari File dalam Subdirektori

Misalkan kita ingin mencari semua file .txt di dalam folder dan sub-folder:

bashCopyEdit#!/bin/bash

cari_file() {
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            # Jika item adalah direktori, panggil fungsi lagi (rekursi)
            cari_file "$file"
        elif [[ "$file" == *.txt ]]; then
            echo "Ditemukan file teks: $file"
        fi
    done
}

# Memanggil fungsi dengan direktori saat ini sebagai argumen
cari_file "."

📌 Penjelasan:

  • Fungsi cari_file() menerima path folder sebagai argumen.
  • Menggunakan for loop untuk memeriksa semua item dalam folder.
  • Jika item adalah folder, fungsi dipanggil lagi untuk masuk ke dalam folder tersebut (rekursi).
  • Jika file berakhiran .txt, akan ditampilkan di terminal.

💡 Gunakan ini untuk otomatisasi pencarian file dalam banyak folder!


2️⃣ Menulis ke File dengan Log Otomatis

Dalam pemrosesan file, sering kali kita ingin menyimpan log saat file diproses.

Contoh: Menulis Log ke File Secara Otomatis

bashCopyEdit#!/bin/bash

log_file="process.log"

tulis_log() {
    echo "$(date) - $1" >> "$log_file"
}

# Contoh pemanggilan fungsi
tulis_log "Proses dimulai"
tulis_log "File sedang diproses..."
tulis_log "Proses selesai"

📌 Penjelasan:

  • Fungsi tulis_log() menulis log dengan format [timestamp] – pesan.
  • Output log disimpan ke process.log.

💡 Gunakan teknik ini untuk mencatat aktivitas skrip secara otomatis!


3️⃣ Membaca File dengan Validasi

Sebelum membaca file, kita harus memastikan file tersebut ada untuk menghindari error.

Contoh: Mengecek dan Membaca File dengan while read line

bashCopyEdit#!/bin/bash

file="data.txt"

if [ -f "$file" ]; then
    while read line; do
        echo "Membaca: $line"
    done < "$file"
else
    echo "File tidak ditemukan: $file"
fi

📌 Penjelasan:

  • [ -f "$file" ] memastikan file ada sebelum dibaca.
  • Jika file ada, dibaca baris per baris menggunakan while read line.
  • Jika file tidak ditemukan, akan muncul pesan error.

💡 Selalu gunakan validasi sebelum memproses file dalam skrip otomatis!


4️⃣ Studi Kasus: Mengubah Isi Banyak File Secara Rekursif

Misalkan kita ingin mengganti semua kata “lama” menjadi “baru” dalam file teks di banyak folder.

Skrip: Edit Banyak File dengan sed dan Fungsi Rekursif

bashCopyEdit#!/bin/bash

edit_file() {
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            edit_file "$file"  # Rekursif untuk sub-folder
        elif [[ "$file" == *.txt ]]; then
            sed -i 's/lama/baru/g' "$file"
            echo "Diperbarui: $file"
        fi
    done
}

# Memanggil fungsi dengan direktori saat ini
edit_file "."

📌 Penjelasan:

  • Fungsi edit_file() menelusuri semua file dalam folder/sub-folder.
  • Jika menemukan file .txt, menggunakan sed untuk mengganti kata dalam file.
  • Fungsi dipanggil ulang untuk masuk ke dalam sub-folder (rekursi).

💡 Skrip ini berguna untuk mengedit banyak file secara otomatis!


5️⃣ Menghapus File Lama Secara Otomatis

Terkadang kita ingin menghapus file yang lebih tua dari X hari.

Skrip: Hapus File Lebih dari 30 Hari

bashCopyEdit#!/bin/bash

folder="./backup"
find "$folder" -type f -mtime +30 -exec rm {} \;

echo "File yang lebih tua dari 30 hari telah dihapus."

📌 Penjelasan:

  • find "$folder" -type f -mtime +30 mencari file yang lebih dari 30 hari.
  • -exec rm {} menghapus file tersebut.

💡 Bagus untuk membersihkan file backup lama secara otomatis!


Kesimpulan & Tantangan untuk Kamu!

Sekarang kamu sudah belajar:
Fungsi rekursif untuk mencari dan memproses file dalam sub-folder.
Menulis log secara otomatis ke file.
Validasi sebelum membaca file untuk menghindari error.
Menggunakan sed untuk mengedit banyak file secara otomatis.
Menghapus file lama dengan find dan rm.

🔥 Tantangan:

  1. Buat skrip rekursif yang mencari semua file .log di dalam folder dan menghitung jumlahnya.
  2. Buat fungsi yang menghapus baris kosong dari semua file teks dalam folder.

Bagikan kodenya di komentar! 😉

Di artikel berikutnya, kita akan membahas pengolahan teks lebih lanjut dalam Bash menggunakan sed dan awk. Stay tuned! 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *