Files
Documentation/Moodle/Tools/agets.sh
2025-08-20 09:47:42 +07:00

71 lines
2.0 KiB
Bash

#!/bin/bash
INPUT_LIST="list.txt"
TEMP_LIST="list_to_download.txt"
MIN_VALID_SIZE=1024 # Kích thước tối thiểu (bytes) để coi là file hợp lệ
# 🔍 Kiểm tra aria2c đã cài chưa
if ! command -v aria2c &> /dev/null; then
echo "❌ Lỗi: aria2c chưa được cài. Vui lòng cài aria2 trước."
exit 1
fi
# 📂 Kiểm tra file list.txt có tồn tại không
if [ ! -f "$INPUT_LIST" ]; then
echo "❌ Không tìm thấy file $INPUT_LIST"
exit 1
fi
# 📝 Tạo danh sách tạm các URL cần tải
> "$TEMP_LIST"
while read -r url; do
# 👉 Bỏ qua dòng trống hoặc comment
[[ -z "$url" || "$url" == \#* ]] && continue
# 🎯 Lấy tên file bỏ phần query string
filename=$(basename "${url%%\?*}")
# 📦 Kiểm tra trạng thái file
if [ ! -f "$filename" ]; then
echo "$url" >> "$TEMP_LIST"
echo "⬇️ Thiếu file: $filename"
elif [ -f "$filename.aria2" ]; then
echo "$url" >> "$TEMP_LIST"
echo "🔄 Đang tải dở: $filename"
elif [ "$(stat -c%s "$filename")" -lt "$MIN_VALID_SIZE" ]; then
echo "$url" >> "$TEMP_LIST"
echo "⚠️ File nhỏ bất thường (<$MIN_VALID_SIZE bytes), sẽ tải lại: $filename"
else
echo "✅ Đã có đầy đủ: $filename"
fi
done < "$INPUT_LIST"
# 🚫 Nếu không còn gì để tải
if [ ! -s "$TEMP_LIST" ]; then
echo "🎉 Tất cả file đã được tải đầy đủ."
rm -f "$TEMP_LIST"
exit 0
fi
# 🚀 Bắt đầu tải bằng aria2c
aria2c \
-i "$TEMP_LIST" \
--dir=. \
--max-connection-per-server=16 \
--split=16 \
--min-split-size=1M \
--max-concurrent-downloads=10 \
--continue=true \
--remove-control-file=true \
--auto-file-renaming=false \
--file-allocation=none \
--summary-interval=0 \
--console-log-level=warn \
--log="aria2_download.log" \
--log-level=notice
# ✅ Hoàn tất
echo "✅ Hoàn tất tải các file chưa đầy đủ."
rm -f "$TEMP_LIST"