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
, menggunakansed
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:
- Buat skrip rekursif yang mencari semua file
.log
di dalam folder dan menghitung jumlahnya. - 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! 🚀