File: //var/log/nginx/get_wp_logs_last_7_days.sh
#!/bin/bash
############################
# CONFIG
############################
LOG_DIR="/var/log/nginx"
OUTPUT_DIR="/home/ubuntu/output"
DAYS=7
LOG_FILES=(
"mentoring-wp_access.log"
"truelysell-wp_access.log"
"kofejob-wp_access.log"
"dreamslms-wp_access.log"
"listee-wp_access.log"
"doccure-wp_access.log"
"dreamsrent-wp_access.log"
"dreamsalon-wp_access.log"
"dreamstour-wp_access.log"
"dreamsai-wp_access.log"
)
############################
# PREP
############################
mkdir -p "$OUTPUT_DIR"
REF_DATE=$(date -d "$DAYS days ago 00:00:00" +%s)
############################
# FUNCTION TO FILTER LOGS
############################
filter_log() {
while IFS= read -r line; do
# Extract timestamp inside brackets
ts=$(echo "$line" | grep -oP '\[\K[0-9]{2}/[A-Za-z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2}')
if [ -n "$ts" ]; then
# Convert to seconds safely
log_sec=$(date -d "$ts" +%s 2>/dev/null)
if [ -n "$log_sec" ] && [ "$log_sec" -ge "$REF_DATE" ]; then
echo "$line"
fi
fi
done
}
############################
# PROCESS LOGS
############################
for LOG in "${LOG_FILES[@]}"; do
INPUT="$LOG_DIR/$LOG"
OUTPUT="$OUTPUT_DIR/${LOG%.log}_last_${DAYS}_days.log"
if [ ! -f "$INPUT" ]; then
echo "File $INPUT not found, skipping..."
continue
fi
echo "Processing $LOG ..."
# Clear output file
> "$OUTPUT"
# Current log
filter_log < "$INPUT" >> "$OUTPUT"
# Rotated logs
for ROTATED in "$LOG_DIR/${LOG}."*; do
[ -f "$ROTATED" ] || continue
if [[ "$ROTATED" == *.gz ]]; then
zcat "$ROTATED" | filter_log >> "$OUTPUT"
else
filter_log < "$ROTATED" >> "$OUTPUT"
fi
done
done
echo "Done! Logs saved in $OUTPUT_DIR"