Detecte el tipo de archivo con la ayuda de magic-file y cambie el nombre del sufijo del archivo en consecuencia

Detecte el tipo de archivo con la ayuda de magic-file y cambie el nombre del sufijo del archivo en consecuencia

Tengo una carpeta (la Copia de Seguridad del iPhone) con varios archivos sin sufijo.

Quiero ejecutar un proceso por lotes sobre estos archivos, que detecta el tipo de archivo de cada archivo (con la ayuda de la base de datos de archivos mágicos (/usr/share/misc/magiaoarchivo de hombre), y automáticamente cambia/cambia el nombre de su sufijo de archivo (desde un archivo de base de datos/tipo mime<->sufijo) en consecuencia.

Las horas de búsqueda en Google y StackExchange-Searching no arrojaron resultados, debido a la naturaleza general de las palabras clave involucradas "archivo", "magia", "cambiar nombre", etc. ¡Se agradece la ayuda!

Respuesta1

¿Cómo se ve su base de datos de sufijo tipo <->? No es tan trivial interpretar fileel resultado. Simplemente asumiré: * que el primer archivo de palabras que se imprime es suficiente * esta palabra es la clave en un archivo donde cada línea contiene: y el valor es el sufijo que queremos

Para bash, escribiría una función que tome como argumento el tipo de archivo y repita el sufijo:

MISTERIOUSFILEMIMETYPETOSUFFIXDB=/path/to/key/value/file

typetosuffix () {
    grep -E "^\s*$1:" ${MISTERIOUSFILEMIMETYPETOSUFFIXDB}| cut -d : -f 2
}

Con esa función puedes

for f in $(find /path/to/iphone/backup -type -f)
do
    FILEWITHOUTSUFFIX = basename $f
    [ ${FILEWITHOUTSUFFIX} = ${FILEWITHOUTSUFFIX%.*} ] && continue #the file has a suffix after all
    TYPE=$(file $f | cut -f 2) #put type determining magic here
    SUFFIXITSSUPPOSEDTOHAVE=$(typetosuffix $TYPE) #fetch suffix from DB
    mv $f $f$SUFFIXITSSUPPOSEDTOHAVE #rename the file
done

información relacionada