Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- # fastget — universal aria2c wrapper with auto feature detection
- # Usage:
- # fastget <url> [more_urls...]
- # fastget -o file.zip <url>
- # fastget --sane <url> # less aggressive profile
- set -euo pipefail
- PROFILE="aggressive"
- OUT_NAME=""
- if [[ "${1:-}" == "--sane" ]]; then
- PROFILE="sane"
- shift
- fi
- while getopts ":o:" opt; do
- case "$opt" in
- o) OUT_NAME="$OPTARG" ;;
- *) echo "Usage: $0 [--sane] [-o output] <url> [more_urls...]"; exit 1 ;;
- esac
- done
- shift $((OPTIND - 1))
- if ! command -v aria2c >/dev/null 2>&1; then
- echo "Error: aria2c not found. Install it first (brew install aria2 on macOS)." >&2
- exit 127
- fi
- if [ "$#" -lt 1 ]; then
- echo "Usage: $0 [--sane] [-o output] <url> [more_urls...]"
- exit 1
- fi
- # Detect max cap for --max-connection-per-server (usually 16)
- detect_conn_cap() {
- local cap
- cap="$(aria2c -h 2>/dev/null | awk '
- /--max-connection-per-server=NUM/ {seen=1; next}
- seen && /Possible Values:/ {gsub(/[^0-9-]/,""); split($0,a,"-"); print a[2]; exit}
- ')"
- [[ "$cap" =~ ^[0-9]+$ ]] && echo "$cap" || echo 16
- }
- ARIA_CONN_CAP="$(detect_conn_cap)"
- # Profile defaults
- if [[ "$PROFILE" == "aggressive" ]]; then
- ARIA_CONN="${ARIA_CONN:-32}"
- ARIA_SPLIT="${ARIA_SPLIT:-32}"
- ARIA_CHUNK="${ARIA_CHUNK:-4M}"
- ARIA_CACHE="${ARIA_CACHE:-512M}"
- else
- ARIA_CONN="${ARIA_CONN:-16}"
- ARIA_SPLIT="${ARIA_SPLIT:-16}"
- ARIA_CHUNK="${ARIA_CHUNK:-2M}"
- ARIA_CACHE="${ARIA_CACHE:-256M}"
- fi
- ARIA_TRIES="${ARIA_TRIES:-0}"
- ARIA_WAIT="${ARIA_WAIT:-5}"
- # Clamp connections
- if (( ARIA_CONN > ARIA_CONN_CAP )); then
- echo "Note: clamping --max-connection-per-server from ${ARIA_CONN} to ${ARIA_CONN_CAP}" >&2
- ARIA_CONN="$ARIA_CONN_CAP"
- fi
- # Helper: check if aria2c supports an option
- has_opt() {
- aria2c -h 2>/dev/null | grep -q -- "$1"
- }
- OPTS=(
- --continue=true
- --max-connection-per-server="${ARIA_CONN}"
- --split="${ARIA_SPLIT}"
- --min-split-size="${ARIA_CHUNK}"
- --piece-length="${ARIA_CHUNK}"
- --disk-cache="${ARIA_CACHE}"
- --file-allocation=none
- --auto-file-renaming=false
- --retry-wait="${ARIA_WAIT}"
- --max-tries="${ARIA_TRIES}"
- --conditional-get=true
- --uri-selector=inorder
- --console-log-level=warn
- --summary-interval=3
- --header="Accept-Encoding: identity"
- --reuse-uri=true
- )
- # Add only if supported
- has_opt "--enable-mmap" && OPTS+=( --enable-mmap=true )
- has_opt "--async-dns" && OPTS+=( --async-dns=true )
- # Respect -o if one URL
- if [ -n "$OUT_NAME" ] && [ "$#" -eq 1 ]; then
- OPTS+=( -o "$OUT_NAME" )
- fi
- aria2c "${OPTS[@]}" "$@"
Advertisement
Add Comment
Please, Sign In to add comment