¿Cómo descargar una imagen con wget y guardarla con el hash md5 como nombre?

¿Cómo descargar una imagen con wget y guardarla con el hash md5 como nombre?

¿Cómo puedo descargar una imagen, hacer un hash md5 de la imagen y guardar esa imagen con el hash md5 como nombre en un directorio usando wget?

# An example of the image link...
http://31.media.tumblr.com/e1b8907c78b46099fd9611c2ab4b69ef/tumblr_n8rul3oJO91txb5tdo1_500.jpg

# Save the image linked with for name the MD5 hash

d494ba8ec8d4500cd28fbcecf38083ba.jpg

# Save the image with the new name to another directory

~/Users/TheGrayFox/Images/d494ba8ec8d4500cd28fbcecf38083ba.jpg

Respuesta1

Puedes hacerlo de diferentes maneras. Un pequeño guión ayudará. Puedes llamarlo con /bin/bash myscript.sh http://yourhost/yourimage.ext where_to_save. El directorio de destino es opcional:

#!/bin/bash
MyLink=${1}
DestDir=${2:-"~/Users/TheGrayFox/Images/"}   # fix destination directory
MyPath=$(dirname $MyLink)                    # strip the dirname  (Not used)
MyFile=$(basename $MyLink)                   # strip the filename
Extension="${MyFile##*.}"                    # strip the extension 

wget $MyLink                                 # get the file
MyMd5=$(md5sum $MyFile | awk '{print $1}')   # calculate md5sum
mv $MyFile  ${DestDir}/${MyMd5}.${Extension} # mv and rename the file
echo $MyMd5                                  # print the md5sum if wanted

El comando dirnameelimina el último componente del nombre del archivo, y el comando basenameelimina el directorio y el sufijo de los nombres de archivo.

Incluso puede decidir guardar directamente el archivo desde wget en el directorio de destino y luego calcular la suma md5 y cambiarle el nombre. En este caso es necesario utilizar wget From_where/what.jpg -O destpath. La nota es una o mayúscula Oy no un cero.

Respuesta2

Esto es un poco complejo para wget, ya que su único propósito es simplemente extraer cosas de las redes internas. Probablemente tendrás que cambiar un poco las cosas.

$ wget -O tmp.jpg http://31.media.tumblr.com/e1b8907c78b46099fd9611c2ab4b69ef/tumblr_n8rul3oJO91txb5tdo1_500.jpg; mv tmp.jpg $(md5sum tmp.jpg | cut -d' ' -f1).jpg
$ ls *jpg
fdef5ed6533af93d712b92fa7bf98ed8.jpg

Como es un poco desagradable copiar pasta todo el tiempo, puedes simplemente crear un script de shell y llamarlo con "./fetch.shhttp://ejemplo.com/imagen.jpg"

$ cat fetch.sh 
#! /bin/bash

url=$1
ext=${url##*.}
wget -O /tmp/tmp.fetch $url
sum=$(md5sum /tmp/tmp.fetch | cut -d' ' -f1)
mv /tmp/tmp.fetch ${HOME}/Images/${sum}.${ext}

Hice una edición rápida para que lo anterior funcione para todos los tipos de archivos, no solo jpg.

información relacionada