Add create_torrent.sh

This commit is contained in:
2025-08-26 20:14:19 +00:00
parent 210d1caa33
commit 1aec74a53b

200
create_torrent.sh Normal file
View File

@@ -0,0 +1,200 @@
#!/bin/bash
# Configuration
SOURCE_DIR="/mnt/zpool0_nfs/cios_www"
DEST_DIR="/home/paulmataruso/TORRENT_BACKUP_GOLD"
TORRENT_WATCH_DIR="/home/paulmataruso/TORRENT_WATCH"
TRACKER_URL="http://tracker.dhitechnical.com:6969/announce"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_header() {
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}================================${NC}"
}
# Check if transmission-create is installed
check_dependencies() {
if ! command -v transmission-create &> /dev/null; then
print_error "transmission-create is not installed. Please install transmission-cli package."
print_status "On Ubuntu/Debian: sudo apt-get install transmission-cli"
print_status "On CentOS/RHEL: sudo yum install transmission-cli"
print_status "On Arch: sudo pacman -S transmission-cli"
exit 1
fi
}
# Validate destination directories exist
check_dest_dirs() {
if [ ! -d "$DEST_DIR" ]; then
print_error "Destination directory does not exist: $DEST_DIR"
exit 1
fi
if [ ! -d "$TORRENT_WATCH_DIR" ]; then
print_error "Torrent watch directory does not exist: $TORRENT_WATCH_DIR"
exit 1
fi
}
# Calculate optimal piece size based on folder size
calculate_piece_size() {
local folder_path="$1"
local size_bytes=$(du -sb "$folder_path" | cut -f1)
# Convert to MB for easier comparison
local size_mb=$((size_bytes / 1024 / 1024))
# Piece size mapping based on folder size
# < 100 MB: 16 KB pieces
# 100 MB - 1 GB: 32 KB pieces
# 1 GB - 10 GB: 64 KB pieces
# 10 GB - 100 GB: 128 KB pieces
# > 100 GB: 256 KB pieces
if [ $size_mb -lt 100 ]; then
echo "16"
elif [ $size_mb -lt 1024 ]; then
echo "32"
elif [ $size_mb -lt 10240 ]; then
echo "64"
elif [ $size_mb -lt 102400 ]; then
echo "128"
else
echo "256"
fi
}
# Format size for display
format_size() {
local size_bytes="$1"
if [ $size_bytes -gt 1073741824 ]; then
echo "$(($size_bytes / 1073741824)) GB"
elif [ $size_bytes -gt 1048576 ]; then
echo "$(($size_bytes / 1048576)) MB"
elif [ $size_bytes -gt 1024 ]; then
echo "$(($size_bytes / 1024)) KB"
else
echo "$size_bytes bytes"
fi
}
# Create torrent file for a single folder
create_torrent() {
local folder_path="$1"
local folder_name=$(basename "$folder_path")
local torrent_file="$DEST_DIR/${folder_name}.torrent"
# Calculate folder size and optimal piece size
local size_bytes=$(du -sb "$folder_path" | cut -f1)
local size_formatted=$(format_size $size_bytes)
local piece_size=$(calculate_piece_size "$folder_path")
print_status "Creating torrent for: $folder_name (Size: $size_formatted, Piece size: ${piece_size}KB)"
# Create torrent file
transmission-create \
--tracker "$TRACKER_URL" \
--outfile "$torrent_file" \
--piece-size "$piece_size" \
--comment "Created by torrent creation script - Piece size: ${piece_size}KB" \
"$folder_path"
if [ $? -eq 0 ]; then
print_status "✓ Torrent created: $torrent_file"
# Copy torrent file to watch directory
local watch_torrent_file="$TORRENT_WATCH_DIR/${folder_name}.torrent"
cp "$torrent_file" "$watch_torrent_file"
chown 1000:1000 "$watch_torrent_file"
print_status "✓ Torrent copied to watch directory: $watch_torrent_file"
# Extract magnet link
local magnet_link=$(transmission-show --magnet "$torrent_file")
if [ $? -eq 0 ]; then
local magnet_file="$DEST_DIR/${folder_name}.magnet"
echo "$magnet_link" > "$magnet_file"
print_status "✓ Magnet link saved: $magnet_file"
else
print_warning "Could not extract magnet link for: $folder_name"
fi
else
print_error "Failed to create torrent for: $folder_name"
fi
}
# Main function
main() {
print_header "Torrent Creation Script"
# Check dependencies
check_dependencies
# Validate source directory
if [ ! -d "$SOURCE_DIR" ]; then
print_error "Source directory does not exist: $SOURCE_DIR"
exit 1
fi
print_status "Source directory: $SOURCE_DIR"
print_status "Destination directory: $DEST_DIR"
print_status "Torrent watch directory: $TORRENT_WATCH_DIR"
print_status "Tracker URL: $TRACKER_URL"
# Validate destination directories
check_dest_dirs
# Get list of folders in source directory
local folders=($(find "$SOURCE_DIR" -maxdepth 1 -type d -not -name "$(basename "$SOURCE_DIR")"))
if [ ${#folders[@]} -eq 0 ]; then
print_warning "No folders found in source directory"
exit 0
fi
print_status "Found ${#folders[@]} folders to process"
# Process each folder
local count=0
for folder in "${folders[@]}"; do
count=$((count + 1))
print_status "Processing folder $count of ${#folders[@]}: $(basename "$folder")"
create_torrent "$folder"
echo
done
print_header "Summary"
print_status "Processed ${#folders[@]} folders"
print_status "Torrent files saved to: $DEST_DIR"
print_status "Torrent files copied to: $TORRENT_WATCH_DIR"
print_status "Magnet files saved to: $DEST_DIR"
# List created files
echo
print_status "Created files:"
ls -la "$DEST_DIR"/*.torrent 2>/dev/null | wc -l | xargs echo " Torrent files in backup:"
ls -la "$TORRENT_WATCH_DIR"/*.torrent 2>/dev/null | wc -l | xargs echo " Torrent files in watch:"
ls -la "$DEST_DIR"/*.magnet 2>/dev/null | wc -l | xargs echo " Magnet files:"
}
# Run main function
main "$@"