#!/bin/bash tmp_links_file="/tmp/links.tmp" tmp_file_download="/tmp/download.tmp" nano "$tmp_links_file" read -p "Enter output directory: " outdir # manually created arrays for file types and extensions ## notes: from twitter downloader mp4 files show as ISO? types_arr=('MPEG' 'ISO' 'JPEG' 'PNG' 'GIF' 'WebM' 'RIFF') exts_arr=('mp4' 'mp4' 'jpg' 'png' 'gif' 'webm' 'webp') # create the out dir if not extant if [ ! -d "$outdir" ]; then echo "Output directory does not exist: $outdir Creating" mkdir "$outdir" fi # read the input file and loop through it cat "$tmp_links_file" | \ while read line; do # get default basename of downloaded file file_basename=$(basename "$line") # download the file to a tmp echo "Downloading $line to $outdir/$file_basename" curl -s -o "$tmp_file_download" "$line" # get the file type type=$(file "$tmp_file_download" | awk '{print $2}') # md5 hash the file for a deterministic file name namehash=$(md5sum "$tmp_file_download" | awk '{print $1}') # map the file type to the corresponding extension count=0 # loop through types for patch with file type for item in "${types_arr[@]}"; do if [[ " ${types_arr[@]} " =~ " ${type} " ]]; then # if type matches if [[ "$item" == "$type" ]]; then # rename the downloaded file new_name="$outdir/$namehash.$(echo ${exts_arr[$count]})" # echo -e "\tRenaming $file_basename to $new_name\n" mv "$tmp_file_download" "$new_name" if [ $? -ne 0 ]; then echo -e "\nFailed to rename $tmp_file_download to $new_name\n\turl\n\t$line\n\ttype $type\n\tbase name: $file_basename\n" fi fi else echo -e "\n$file_basename not a supported format: $type $(file $tmp_file_download)!\n\turl: $line\n\ttype: $type\n\tbase name: $file_basename\n\tfile: $(file $tmp_file_download)\n" rm -f "$tmp_file_download" fi # increment the count regardless count=$((count + 1)) done done # cleanup rm -f "$tmp_links_file" >/dev/null 2>&1 # suppress errors or output rm -f "$tmp_file_download" >/dev/null 2>&1 # suppress errors or output