Mercurial > ec-dotfiles
comparison moefetch.sh @ 223:04ad0b0a3c63
revert back to [
| author | edhoprima@gmail.com <edhoprima@gmail.com> |
|---|---|
| date | Thu, 02 Jul 2009 21:32:45 +0000 |
| parents | e3fb9507cf7f |
| children | 0ac1805621d4 |
comparison
equal
deleted
inserted
replaced
| 222:e3fb9507cf7f | 223:04ad0b0a3c63 |
|---|---|
| 133 | 133 |
| 134 # getting rid of ls (as per suggestion) | 134 # getting rid of ls (as per suggestion) |
| 135 Count_Files() { | 135 Count_Files() { |
| 136 _i=0 | 136 _i=0 |
| 137 for _f in "${*}/"* "${*}/".*; do | 137 for _f in "${*}/"* "${*}/".*; do |
| 138 if test "${_f}" != "${*}/"'*' || test -e "${_f}"; then | 138 if [ "${_f}" != "${*}/*" ] || [ -e "${_f}" ]; then |
| 139 _i=$((_i + 1)) | 139 _i=$((_i + 1)) |
| 140 fi | 140 fi |
| 141 done | 141 done |
| 142 echo $((_i - 2)) | 142 echo $((_i - 2)) |
| 143 } | 143 } |
| 144 | 144 |
| 145 # check tools availability | 145 # check tools availability |
| 146 Check_Tools() { | 146 Check_Tools() { |
| 147 # verify all programs required do indeed exist | 147 # verify all programs required do indeed exist |
| 148 #MD5 | 148 #MD5 |
| 149 if test -z "${MD5}"; then | 149 if [ -z "${MD5}" ]; then |
| 150 case "$(uname)" in | 150 case "$(uname)" in |
| 151 *BSD) MD5="md5 -r";; | 151 *BSD) MD5="md5 -r";; |
| 152 Linux|SunOS) MD5="md5sum";; | 152 Linux|SunOS) MD5="md5sum";; |
| 153 *) Fatal_Err "No known md5 tool for this platform. Please specify manually";; | 153 *) Fatal_Err "No known md5 tool for this platform. Please specify manually";; |
| 154 esac | 154 esac |
| 162 done | 162 done |
| 163 } | 163 } |
| 164 | 164 |
| 165 # verify required folders exist and writeable | 165 # verify required folders exist and writeable |
| 166 Check_Folders(){ | 166 Check_Folders(){ |
| 167 test -O "${BASE_DIR}" || Err_Fatal "You don't own ${BASE_DIR}. Please fix ${BASE_DIR} or run this script in your own directory." | 167 [ -O "${BASE_DIR}" ] || Err_Fatal "You don't own ${BASE_DIR}. Please fix ${BASE_DIR} or run this script in your own directory." |
| 168 for directory in temp trash deleted "${SITE_DIR}/${TARGET_DIR}"; do | 168 for directory in temp trash deleted "${SITE_DIR}/${TARGET_DIR}"; do |
| 169 if [ ! -d "${BASE_DIR}/${directory}" ]; then | 169 if [ ! -d "${BASE_DIR}/${directory}" ]; then |
| 170 mkdir -p "${BASE_DIR}/${directory}" || Err_Impossible | 170 mkdir -p "${BASE_DIR}/${directory}" || Err_Impossible |
| 171 fi | 171 fi |
| 172 if [ ! -O "${BASE_DIR}/${directory}" ]; then | 172 if [ ! -O "${BASE_DIR}/${directory}" ]; then |
| 173 echo "You don't own the ${BASE_DIR}/${directory}, applying globally writeable permission on it" | 173 echo "You don't own the ${BASE_DIR}/${directory}, applying globally writeable permission on it" |
| 174 chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible | 174 chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible |
| 175 fi | 175 fi |
| 176 done | 176 done |
| 177 test "$(Count_Files "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}")" -eq 0 && ISNEW=1 | 177 [ "$(Count_Files "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}")" -eq 0 ] && ISNEW=1 |
| 178 for i in error ok list newlist templist; do | 178 for i in error ok list newlist templist; do |
| 179 touch "${TEMP_PREFIX}-${i}" || Fatal_Err "Error creating ${TEMP_PREFIX}-${i}. This shouldn't happen" | 179 touch "${TEMP_PREFIX}-${i}" || Fatal_Err "Error creating ${TEMP_PREFIX}-${i}. This shouldn't happen" |
| 180 done | 180 done |
| 181 # | 181 # |
| 182 } | 182 } |
| 187 printf "Cleaning up repository folder... " | 187 printf "Cleaning up repository folder... " |
| 188 Progress_Init | 188 Progress_Init |
| 189 trash_dir="${BASE_DIR}/trash/${trash_dir}/$(date -u "+${SITE_DIR}-${TARGET_DIR}-%Y%m%d-%H.%M")" | 189 trash_dir="${BASE_DIR}/trash/${trash_dir}/$(date -u "+${SITE_DIR}-${TARGET_DIR}-%Y%m%d-%H.%M")" |
| 190 trashes="These files have been moved to ${trash_dir}:" | 190 trashes="These files have been moved to ${trash_dir}:" |
| 191 has_trash= | 191 has_trash= |
| 192 if test ! -d "${trash_dir}"; then | 192 if [ ! -d "${trash_dir}" ]; then |
| 193 mkdir -p "${trash_dir}" || Err_Impossible | 193 mkdir -p "${trash_dir}" || Err_Impossible |
| 194 else | 194 else |
| 195 if test ! -o "${trash_dir}"; then | 195 if [ ! -O "${trash_dir}" ]; then |
| 196 chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible | 196 chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible |
| 197 fi | 197 fi |
| 198 fi | 198 fi |
| 199 for trash in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* | 199 for trash in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* |
| 200 do | 200 do |
| 201 is_trash= | 201 is_trash= |
| 202 if test -d "${trash}" || test -n "$(Is_NotMD5 "$(basename "${trash}")")" || test -z "$(grep "$(basename "${trash}")" "${TEMP_PREFIX}-list")"; then | 202 if [ -d "${trash}" ] || [ -n "$(Is_NotMD5 "$(basename "${trash}")")" ] || [ -z "$(grep "$(basename "${trash}")" "${TEMP_PREFIX}-list")" ]; then |
| 203 is_trash=1 | 203 is_trash=1 |
| 204 has_trash=1 | 204 has_trash=1 |
| 205 mv -f "${trash}" "${trash_dir}" || Err_Impossible | 205 mv -f "${trash}" "${trash_dir}" || Err_Impossible |
| 206 trashes="${trashes} | 206 trashes="${trashes} |
| 207 $(basename "${trash}")" | 207 $(basename "${trash}")" |
| 208 fi | 208 fi |
| 209 Progress_Anim | 209 Progress_Anim |
| 210 done | 210 done |
| 211 rmdir "${trash_dir}" 2>/dev/null | 211 rmdir "${trash_dir}" 2>/dev/null |
| 212 Progress_Done | 212 Progress_Done |
| 213 test -n "${has_trash}" && echo "${trashes}" | 213 [ -n "${has_trash}" ] && echo "${trashes}" |
| 214 } | 214 } |
| 215 | 215 |
| 216 # check files correctness | 216 # check files correctness |
| 217 Check_Files() { | 217 Check_Files() { |
| 218 if test ! -n "${ISNEW}"; then | 218 if [ ! -n "${ISNEW}" ]; then |
| 219 test -z "${NOCLEAN}" && Cleanup_Repository | 219 [ -z "${NOCLEAN}" ] && Cleanup_Repository |
| 220 printf "Checking for errors... " | 220 printf "Checking for errors... " |
| 221 Progress_Init | 221 Progress_Init |
| 222 files_error="These files do not match its md5:" | 222 files_error="These files do not match its md5:" |
| 223 files_notdanbooru="These files are not checked:" | 223 files_notdanbooru="These files are not checked:" |
| 224 has_err_filename= | 224 has_err_filename= |
| 225 has_err_md5= | 225 has_err_md5= |
| 226 > "${TEMP_PREFIX}-error" | 226 > "${TEMP_PREFIX}-error" |
| 227 > "${TEMP_PREFIX}-ok" | 227 > "${TEMP_PREFIX}-ok" |
| 228 for file in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* | 228 for file in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* |
| 229 do | 229 do |
| 230 if test "${file}" != "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/*"; then | 230 if [ "${file}" != "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/*" ]; then |
| 231 if test -n "$(Is_NotMD5 "$(basename "${file}")")" || test -d "${file}"; then | 231 if [ -n "$(Is_NotMD5 "$(basename "${file}")")" ] || [ -d "${file}" ]; then |
| 232 files_notdanbooru="${files_notdanbooru} | 232 files_notdanbooru="${files_notdanbooru} |
| 233 $(basename "${file}")" | 233 $(basename "${file}")" |
| 234 has_err_filename=1 | 234 has_err_filename=1 |
| 235 else | 235 else |
| 236 if test "$(${MD5} "${file}" | cut -d ' ' -f 1)" = "$(basename "${file}" | cut -d '.' -f 1)"; then | 236 if [ "$(${MD5} "${file}" | cut -d ' ' -f 1)" = "$(basename "${file}" | cut -d '.' -f 1)" ]; then |
| 237 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-ok" | 237 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-ok" |
| 238 else | 238 else |
| 239 rm "${file}" || Err_Fatal "Error removing ${file}" | 239 rm "${file}" || Err_Fatal "Error removing ${file}" |
| 240 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-error" | 240 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-error" |
| 241 files_error="${files_error} | 241 files_error="${files_error} |
| 245 fi | 245 fi |
| 246 fi | 246 fi |
| 247 Progress_Anim | 247 Progress_Anim |
| 248 done | 248 done |
| 249 Progress_Done | 249 Progress_Done |
| 250 if test ! -n "${has_err_md5}" && test ! -n "${has_err_filename}"; then | 250 if [ ! -n "${has_err_md5}" ] && [ ! -n "${has_err_filename}" ]; then |
| 251 echo "All files OK" | 251 echo "All files OK" |
| 252 else | 252 else |
| 253 if test -n "${has_err_md5}"; then | 253 if [ -n "${has_err_md5}" ]; then |
| 254 echo "${files_error}" | 254 echo "${files_error}" |
| 255 echo "$(echo $(wc -l < "${TEMP_PREFIX}-error")) file(s) removed" | 255 echo "$(echo $(wc -l < "${TEMP_PREFIX}-error")) file(s) removed" |
| 256 fi | 256 fi |
| 257 test -n "${has_err_filename}" && echo "${files_notdanbooru}" | 257 [ -n "${has_err_filename}" ] && echo "${files_notdanbooru}" |
| 258 fi | 258 fi |
| 259 echo "$(echo $(wc -l < "${TEMP_PREFIX}-ok")) file(s) available locally" | 259 echo "$(echo $(wc -l < "${TEMP_PREFIX}-ok")) file(s) available locally" |
| 260 | 260 |
| 261 printf "Generating list of new files... " | 261 printf "Generating list of new files... " |
| 262 Progress_Init | 262 Progress_Init |
| 267 Progress_Anim | 267 Progress_Anim |
| 268 done < "${TEMP_PREFIX}-ok" | 268 done < "${TEMP_PREFIX}-ok" |
| 269 Progress_Done | 269 Progress_Done |
| 270 echo "$(echo $(wc -l < "${TEMP_PREFIX}-newlist")) file(s) to be downloaded" | 270 echo "$(echo $(wc -l < "${TEMP_PREFIX}-newlist")) file(s) to be downloaded" |
| 271 else | 271 else |
| 272 if test -n "${ISQUICK}"; then | 272 if [ -n "${ISQUICK}" ]; then |
| 273 echo "Quick mode selected. Skipping check" | 273 echo "Quick mode selected. Skipping check" |
| 274 else | 274 else |
| 275 echo "Empty local repository" | 275 echo "Empty local repository" |
| 276 fi | 276 fi |
| 277 cat "${TEMP_PREFIX}-list" > "${TEMP_PREFIX}-newlist" | 277 cat "${TEMP_PREFIX}-list" > "${TEMP_PREFIX}-newlist" |
| 278 fi | 278 fi |
| 279 } | 279 } |
| 280 | 280 |
| 281 # start downloading the images | 281 # start downloading the images |
| 282 Fetch_Images() { | 282 Fetch_Images() { |
| 283 if test "$(echo $(wc -l < "${TEMP_PREFIX}-newlist"))" -eq 0; then | 283 if [ "$(echo $(wc -l < "${TEMP_PREFIX}-newlist"))" -eq 0 ]; then |
| 284 echo "No new file" | 284 echo "No new file" |
| 285 else | 285 else |
| 286 printf "Starting wget... " | 286 printf "Starting wget... " |
| 287 cd "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}" | 287 cd "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}" |
| 288 wget -e continue=on -bi "${TEMP_PREFIX}-newlist" -o "${TEMP_PREFIX}.log" | 288 wget -e continue=on -bi "${TEMP_PREFIX}-newlist" -o "${TEMP_PREFIX}.log" |
| 290 } | 290 } |
| 291 | 291 |
| 292 # initialize base variables and initial command check | 292 # initialize base variables and initial command check |
| 293 Init(){ | 293 Init(){ |
| 294 # path initialization | 294 # path initialization |
| 295 test -n "${ADDITIONAL_PATH}" && PATH="${ADDITIONAL_PATH}:${PATH}" | 295 [ -n "${ADDITIONAL_PATH}" ] && PATH="${ADDITIONAL_PATH}:${PATH}" |
| 296 export PATH | 296 export PATH |
| 297 | 297 |
| 298 # misc variables | 298 # misc variables |
| 299 ISQUICK= | 299 ISQUICK= |
| 300 ISNEW= | 300 ISNEW= |
| 329 fi | 329 fi |
| 330 ;; | 330 ;; |
| 331 esac | 331 esac |
| 332 shift | 332 shift |
| 333 done | 333 done |
| 334 test -n "${SITE}" || SITE=${DEFAULT_SITE} | 334 [ -n "${SITE}" ] || SITE=${DEFAULT_SITE} |
| 335 test -n "${TAGS}" || Err_Fatal "No tag specified" | 335 [ -n "${TAGS}" ] || Err_Fatal "No tag specified" |
| 336 # Get base folder - default, current folder or fallback to ${HOME} | 336 # Get base folder - default, current folder or fallback to ${HOME} |
| 337 test -n "${BASE_DIR}" || BASE_DIR=${PWD} | 337 [ -n "${BASE_DIR}" ] || BASE_DIR=${PWD} |
| 338 test -n "${BASE_DIR}" || BASE_DIR=${HOME} | 338 [ -n "${BASE_DIR}" ] || BASE_DIR=${HOME} |
| 339 test -n "$(echo "${BASE_DIR}" | cut -c1 | grep \/)" || BASE_DIR="/${BASE_DIR}" | 339 [ -n "$(echo "${BASE_DIR}" | cut -c1 | grep \/)" ] || BASE_DIR="/${BASE_DIR}" |
| 340 | 340 |
| 341 echo "Tags: ${TAGS}" | 341 echo "Tags: ${TAGS}" |
| 342 # slash is not wanted for folder name | 342 # slash is not wanted for folder name |
| 343 TARGET_DIR=$(echo "${TAGS}" | sed -e 's/\//_/g') | 343 TARGET_DIR=$(echo "${TAGS}" | sed -e 's/\//_/g') |
| 344 SITE_DIR=$(echo "${SITE}" | sed -e 's/\/$//g;s/\//_/g') | 344 SITE_DIR=$(echo "${SITE}" | sed -e 's/\/$//g;s/\//_/g') |
