mirror of
https://github.com/acedanger/shell.git
synced 2025-12-06 04:30:13 -08:00
91 lines
2.8 KiB
Bash
Executable File
91 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
################################################################################
|
|
# Plex Recent Additions Report Script
|
|
################################################################################
|
|
#
|
|
# Author: Peter Wood <peter@peterwood.dev>
|
|
# Description: Generates reports of recently added media items in Plex Media
|
|
# Server by querying the library database directly. Provides
|
|
# customizable time ranges and output formats.
|
|
#
|
|
# Features:
|
|
# - Recent additions reporting (configurable time range)
|
|
# - Library section filtering
|
|
# - Formatted output with headers and columns
|
|
# - Direct SQLite database querying
|
|
# - Media type categorization
|
|
#
|
|
# Related Scripts:
|
|
# - backup-plex.sh: Backs up the database queried by this script
|
|
# - plex.sh: General Plex service management
|
|
# - validate-plex-backups.sh: Validates database integrity
|
|
# - monitor-plex-backup.sh: System monitoring
|
|
#
|
|
# Usage:
|
|
# ./plex-recent-additions.sh # Show additions from last 7 days
|
|
# ./plex-recent-additions.sh 30 # Show additions from last 30 days
|
|
# ./plex-recent-additions.sh --help # Show usage information
|
|
#
|
|
# Dependencies:
|
|
# - sqlite3 (for database queries)
|
|
# - Plex Media Server with populated library
|
|
# - Read access to Plex database files
|
|
#
|
|
# Exit Codes:
|
|
# 0 - Success
|
|
# 1 - Database not found or access denied
|
|
# 2 - Query execution failure
|
|
#
|
|
################################################################################
|
|
|
|
# Handle command line arguments
|
|
DAYS=${1:-7}
|
|
|
|
# Plex SQLite path (custom Plex SQLite binary)
|
|
PLEX_SQLITE="/usr/lib/plexmediaserver/Plex SQLite"
|
|
|
|
|
|
# Show help if requested
|
|
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
|
|
echo "Usage: $0 [DAYS]"
|
|
echo "Show Plex media added in the last DAYS days (default: 7)"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 # Last 7 days"
|
|
echo " $0 30 # Last 30 days"
|
|
exit 0
|
|
fi
|
|
|
|
# Validate that DAYS is a number
|
|
if ! [[ "$DAYS" =~ ^[0-9]+$ ]]; then
|
|
echo "Error: DAYS must be a positive integer"
|
|
exit 2
|
|
fi
|
|
|
|
# Define the path to the Plex database
|
|
PLEX_DB="/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db"
|
|
|
|
# Check if the database exists
|
|
if [ ! -f "$PLEX_DB" ]; then
|
|
echo "Plex database not found at $PLEX_DB"
|
|
exit 1
|
|
fi
|
|
|
|
# Query the database for items added in the specified number of days
|
|
"$PLEX_SQLITE" "$PLEX_DB" <<EOF
|
|
.headers on
|
|
.mode column
|
|
SELECT
|
|
date(meta.added_at, 'unixepoch', 'localtime') AS "added_at"
|
|
, trim(lib.name) as "library_name"
|
|
, meta.year
|
|
, trim(meta.title) as "title"
|
|
FROM
|
|
metadata_items meta
|
|
join library_sections lib on meta.library_section_id = lib.id
|
|
WHERE
|
|
meta.added_at >= strftime('%s', 'now', '-$DAYS days')
|
|
ORDER BY lib.name, meta.added_at DESC;
|
|
EOF
|