Tengo alrededor de 12000 imágenes de diferentes tipos de archivos, pero cada una de ellas pasó a llamarse * .jpg.
Ahora quiero devolverles sus extensiones adecuadas, ¿cómo puedo hacerlo?
files
file-format
akabhirav
fuente
fuente

Respuestas:
Puedes hacerlo con relativa facilidad en bash:
Esta es la misma idea que la respuesta de @ AB pero usando globos de shell en lugar de
find. El${f%%.*}es el nombre de archivo sin su extensión. El-0delfilecomando permite imprimir un\0después del nombre del archivo que luego utilizamos paragrepel tipo de archivo. Esto debería funcionar con nombres de archivos arbitrarios, incluidos aquellos que contienen espacios, líneas nuevas o cualquier otra cosa. El${type,,}es un truco para obtener extensiones en minúsculas. Se convertiríaPNGapng.No dijo en su pregunta, pero si necesita que esto sea recursivo y descienda a subdirectorios, puede usar esto en su lugar:
El
shopt -s globstarpermitirá opción Globstar de fiesta que permite a**los subdirectorios de los partidos:fuente
**recurrir a subdirectorios.fileno siempre especifica la extensión que parece: ¡está convirtiendo un archivo bashfoo.bourne-againaquí, por ejemplo!El siguiente script se puede usar para cambiar el nombre (recursivamente) de una extensión establecida incorrectamente
.jpgpor la correcta. En caso de que encuentre un archivo ilegible, lo informará en la salida del script.La secuencia de comandos utiliza el
imghdrmódulo, para reconocer los siguientes tipos:rgb,gif,pbm,pgm,ppm,tiff,rast,xbm,jpeg,bmp,png. Más sobre elimghdrmódulo aquí . La lista se puede ampliar con más tipos, como se menciona en el enlace.Tal como está, renombra específicamente los archivos con la extensión
.jpg, como se menciona en la pregunta. Con un cambio menor, se puede cambiar el nombre de cualquier extensión, o un conjunto específico de extensiones, a la correcta (o sin extensión, como aquí ).La secuencia de comandos:
Cómo utilizar
rename.pyEjecútelo con el comando:
fuente
Nota: mi enfoque parece ser demasiado complejo. Preferiría que los terdons respondan en su lugar.
Puede usar el comando
filepara determinar el tipo de archivo:Con esta información, los archivos pueden renombrarse:
Haga una prueba antes de aplicar el comando a sus imágenes
Ejemplo
fuente
find -exec bash -c "..."y haga todo lo que esté allí o usewhile read -d '' name typepara dividir el nombre y lafilesalida del archivo y luego analizar$typepara obtener el tipo de archivo. Realmente no vale la pena, vea mi respuesta sobre cómo hacerlo mucho más fácilmente en puro (ish) bash.