| | #!/bin/bash |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | function log { |
| | echo "$@" 1>&2 |
| | } |
| |
|
| | function usage { |
| | log "Usage: $0 [[--url] <url>] [--repo <repo>] [--file <file>] [--outdir <dir> [-h|--help]" |
| | exit 1 |
| | } |
| |
|
| | |
| | function has_cmd { |
| | if ! [ -x "$(command -v $1)" ]; then |
| | return 1 |
| | fi |
| | } |
| |
|
| | if has_cmd wget; then |
| | cmd="wget -q --show-progress -c -O %s/%s %s" |
| | elif has_cmd curl; then |
| | cmd="curl -C - -f --output-dir %s -o %s -L %s" |
| | else |
| | log "[E] curl or wget not found" |
| | exit 1 |
| | fi |
| |
|
| | url="" |
| | repo="" |
| | file="" |
| | outdir="." |
| |
|
| | |
| | while [[ $# -gt 0 ]]; do |
| | case "$1" in |
| | --url) |
| | url="$2" |
| | shift 2 |
| | ;; |
| | --repo) |
| | repo="$2" |
| | shift 2 |
| | ;; |
| | --file) |
| | file="$2" |
| | shift 2 |
| | ;; |
| | --outdir) |
| | outdir="$2" |
| | shift 2 |
| | ;; |
| | -h|--help) |
| | usage |
| | ;; |
| | *) |
| | url="$1" |
| | shift |
| | ;; |
| | esac |
| | done |
| |
|
| | if [ -n "$repo" ] && [ -n "$file" ]; then |
| | url="https://huggingface.co/$repo/resolve/main/$file" |
| | fi |
| |
|
| | if [ -z "$url" ]; then |
| | log "[E] missing --url" |
| | usage |
| | fi |
| |
|
| | |
| | is_url=false |
| |
|
| | if [[ ${#url} -gt 22 ]]; then |
| | if [[ ${url:0:22} == "https://huggingface.co" ]]; then |
| | is_url=true |
| | fi |
| | fi |
| |
|
| | if [ "$is_url" = false ]; then |
| | log "[E] invalid URL, must start with https://huggingface.co" |
| | exit 0 |
| | fi |
| |
|
| | |
| | url=${url/blob\/main/resolve\/main} |
| |
|
| | basename=$(basename $url) |
| |
|
| | log "[+] attempting to download $basename" |
| |
|
| | if [ -n "$cmd" ]; then |
| | cmd=$(printf "$cmd" "$outdir" "$basename" "$url") |
| | log "[+] $cmd" |
| | if $cmd; then |
| | echo $outdir/$basename |
| | exit 0 |
| | fi |
| | fi |
| |
|
| | log "[-] failed to download" |
| |
|
| | exit 1 |
| |
|