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-0
delfile
comando permite imprimir un\0
después del nombre del archivo que luego utilizamos paragrep
el 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íaPNG
apng
.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 globstar
permitirá opción Globstar de fiesta que permite a**
los subdirectorios de los partidos:fuente
**
recurrir a subdirectorios.file
no siempre especifica la extensión que parece: ¡está convirtiendo un archivo bashfoo.bourne-again
aquí, por ejemplo!El siguiente script se puede usar para cambiar el nombre (recursivamente) de una extensión establecida incorrectamente
.jpg
por la correcta. En caso de que encuentre un archivo ilegible, lo informará en la salida del script.La secuencia de comandos utiliza el
imghdr
módulo, para reconocer los siguientes tipos:rgb
,gif
,pbm
,pgm
,ppm
,tiff
,rast
,xbm
,jpeg
,bmp
,png
. Más sobre elimghdr
mó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.py
Ejecú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
file
para 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 type
para dividir el nombre y lafile
salida del archivo y luego analizar$type
para 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.