Tengo una carpeta con la mayor parte de archivos de diferentes tipos, es decir.pdf,.jpg,.png,.peleaetc., pero todos tienen el nombre de la extensión.JPG. ¿Cómo puedo cambiarles el nombre a todos con sus extensiones originales? es decirpdfapdf,peleaapeleaetcétera.
Puedo encontrar el tipo de archivo por:
file 99.jpg
99.jpg: PDF document, version 1.3
¿Existe algún script o programa con el que pueda hacer esto?
Respuesta1
Puede utilizar el tipo MIME encontrado por file
:
#! /usr/bin/env bash
for f in ./*.JPG; do
type=$(file -bi "$f")
type=${type%%;*}
base=${f%.*}
final=
case "$type" in
application/pdf) final="$base".pdf ;;
image/png) final="$base".png ;;
image/tiff) final="$base".tiff ;;
esac
if [ "$final" ]; then
printf '%s --> %s\n' "$f" "$final"
# mv -f "$f" "$final"
fi
done
Agregue más tipos a case
si es necesario (pero omita image/jpeg
, ya que los archivos JPEG ya tienen la extensión correcta). Revise los cambios y luego descomente la mv
línea cuando esté satisfecho con los resultados.
Respuesta2
Generar los comandossinejecutándolos.
Úselo
mimetype
para generar una lista de cadenas de comandos, que posteriormente se modifica medianteÑUsed
'ssustitutos
dominio:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
Si algunas de las extensiones de archivos se ven demasiadomímica-ish, (es decir,
.jpeg
en lugar de.jpg
, etc.), luego agregue tantoss
comandos como sea necesario entresed '
ys
, por ejemplo:sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
Una vez que el resultado se vea bien, ejecútelo con elÑU
sed
's evaluare
opción. (Simplemente coloque une
antes del final'
). Entonces todo podría verse así:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#e' ls # show results