71 lines
2.0 KiB
Bash
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"
|