I have an script that reads some urls and get them to axel to download them. I want stop script on sometimes and resume it further. Axel can resumes file downloading. So if I press Ctrl+C when downloading, the next time, it starts from the resume of file.
but axel doesn't check that the file existed. So it appends ".0" to the end of file name and start downloding it twice. How I can tell to axel if the file with same name existed, skip that and don't downloading it??
If you want to make sure axel will resume, as it does per file name and not per url, you should use a deterministic name for the file:
axel -o NAME_OF_EXISTING_FILE
If you want to check if file exists
if [ -f $FILE ]; then
echo "File $FILE exists."
# operation related to when file exists, aka skip download
else
echo "File $FILE does not exist."
# operation related to when file does not exists
fi
In case of axel, you want to start download if
1. you do not have that file localy, or
2. you have a partial download, so:
function custom_axel() {
local file_thingy="$1"
local url="$2"
if [ ! -e "$file_thingy" ]; then
echo "file not found, downloading: $file_thingy"
axel -avn8 "$url" -o "$file_thingy"
elif [ -e "${file_thingy}.st" ]; then
echo "found partial downloaf, resuming: $file_thingy"
axel -avn8 "$url" -o "$file_thingy"
else
echo "alteady have the file, skipped: $file_thingy"
fi
}
This could go into ~/.bashrc or into /usr/bin/custom_axel.sh and later:
while read URL; do
name=$(basename "$URL") # but make sure it's valid.
custom_axel "$name" "$URL"
done < /my/list/of/files.txt
Axel use a state file, named with a .st extension.
It is regularly updated during download.
When axel is started, it first checks for <file> and <file.st>. If found, download is resumed where it stopped.
Which version do you have ? I got Axel version 2.4 (Linux) and it resume correctly after a CTRL+C.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With