rhcp011235

Untitled

Sep 1st, 2025
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.59 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. # fastget — universal aria2c wrapper with auto feature detection
  3. # Usage:
  4. #   fastget <url> [more_urls...]
  5. #   fastget -o file.zip <url>
  6. #   fastget --sane <url>    # less aggressive profile
  7.  
  8. set -euo pipefail
  9.  
  10. PROFILE="aggressive"
  11. OUT_NAME=""
  12. if [[ "${1:-}" == "--sane" ]]; then
  13.   PROFILE="sane"
  14.   shift
  15. fi
  16.  
  17. while getopts ":o:" opt; do
  18.   case "$opt" in
  19.     o) OUT_NAME="$OPTARG" ;;
  20.     *) echo "Usage: $0 [--sane] [-o output] <url> [more_urls...]"; exit 1 ;;
  21.   esac
  22. done
  23. shift $((OPTIND - 1))
  24.  
  25. if ! command -v aria2c >/dev/null 2>&1; then
  26.   echo "Error: aria2c not found. Install it first (brew install aria2 on macOS)." >&2
  27.   exit 127
  28. fi
  29.  
  30. if [ "$#" -lt 1 ]; then
  31.   echo "Usage: $0 [--sane] [-o output] <url> [more_urls...]"
  32.   exit 1
  33. fi
  34.  
  35. # Detect max cap for --max-connection-per-server (usually 16)
  36. detect_conn_cap() {
  37.   local cap
  38.   cap="$(aria2c -h 2>/dev/null | awk '
  39.    /--max-connection-per-server=NUM/ {seen=1; next}
  40.    seen && /Possible Values:/ {gsub(/[^0-9-]/,""); split($0,a,"-"); print a[2]; exit}
  41.  ')"
  42.   [[ "$cap" =~ ^[0-9]+$ ]] && echo "$cap" || echo 16
  43. }
  44. ARIA_CONN_CAP="$(detect_conn_cap)"
  45.  
  46. # Profile defaults
  47. if [[ "$PROFILE" == "aggressive" ]]; then
  48.   ARIA_CONN="${ARIA_CONN:-32}"
  49.   ARIA_SPLIT="${ARIA_SPLIT:-32}"
  50.   ARIA_CHUNK="${ARIA_CHUNK:-4M}"
  51.   ARIA_CACHE="${ARIA_CACHE:-512M}"
  52. else
  53.   ARIA_CONN="${ARIA_CONN:-16}"
  54.   ARIA_SPLIT="${ARIA_SPLIT:-16}"
  55.   ARIA_CHUNK="${ARIA_CHUNK:-2M}"
  56.   ARIA_CACHE="${ARIA_CACHE:-256M}"
  57. fi
  58. ARIA_TRIES="${ARIA_TRIES:-0}"
  59. ARIA_WAIT="${ARIA_WAIT:-5}"
  60.  
  61. # Clamp connections
  62. if (( ARIA_CONN > ARIA_CONN_CAP )); then
  63.   echo "Note: clamping --max-connection-per-server from ${ARIA_CONN} to ${ARIA_CONN_CAP}" >&2
  64.   ARIA_CONN="$ARIA_CONN_CAP"
  65. fi
  66.  
  67. # Helper: check if aria2c supports an option
  68. has_opt() {
  69.   aria2c -h 2>/dev/null | grep -q -- "$1"
  70. }
  71.  
  72. OPTS=(
  73.   --continue=true
  74.   --max-connection-per-server="${ARIA_CONN}"
  75.   --split="${ARIA_SPLIT}"
  76.   --min-split-size="${ARIA_CHUNK}"
  77.   --piece-length="${ARIA_CHUNK}"
  78.   --disk-cache="${ARIA_CACHE}"
  79.   --file-allocation=none
  80.   --auto-file-renaming=false
  81.   --retry-wait="${ARIA_WAIT}"
  82.   --max-tries="${ARIA_TRIES}"
  83.   --conditional-get=true
  84.   --uri-selector=inorder
  85.   --console-log-level=warn
  86.   --summary-interval=3
  87.   --header="Accept-Encoding: identity"
  88.   --reuse-uri=true
  89. )
  90.  
  91. # Add only if supported
  92. has_opt "--enable-mmap"    && OPTS+=( --enable-mmap=true )
  93. has_opt "--async-dns"      && OPTS+=( --async-dns=true )
  94.  
  95. # Respect -o if one URL
  96. if [ -n "$OUT_NAME" ] && [ "$#" -eq 1 ]; then
  97.   OPTS+=( -o "$OUT_NAME" )
  98. fi
  99.  
  100. aria2c "${OPTS[@]}" "$@"
Advertisement
Add Comment
Please, Sign In to add comment