Cómo identificar el tipo de archivo para una gran cantidad de archivos y adjuntar una extensión adecuada para cada uno

2

Tengo un poco más de mil (1000) archivos cuyo sufijo / extensión ha sido cambiado por un motor de base de datos a la misma cosa (por ejemplo, fileName.abcd donde .abcd está en cada archivo, independientemente de si se trata de un jpg, pdf, o cualquier otra cosa).

El objetivo es convertir todos los archivos a PDF, pero primero quiero ordenar los distintos tipos de archivos en carpetas separadas.

Utilizo Mac OS X y creo que debe haber una secuencia de comandos de Terminal que:

  1. Identifique el archivo (¿quizás con el comando 'Archivo'?) y luego ...
  2. Agregue la extensión apropiada que luego ...
  3. Permítame ordenarlos manualmente y colocarlos en carpetas separadas para su posterior procesamiento dependiendo de su tipo de archivo.

Al usar el comando 'Archivo' de la Terminal en un archivo con el sufijo de la base de datos, los resultados típicos son bastante parecidos a este, que al menos muestra que la Mac puede identificar los tipos de archivo aunque tengan el sufijo 'incorrecto':

  • Datos de imagen JPEG, estándar JFIF 1.01
  • documento PDF, versión 1.3
  • Datos de formato de texto enriquecido, versión 1, ANSI
  • etc.

Por lo tanto, solo necesito una secuencia de comandos que marque los archivos para poder usar Automator para cambiar el nombre de los archivos más tarde con el sufijo correspondiente.

Observo que si en la Terminal escribo 'Archivo' y después de eso suelto o copio varios archivos en ella, y presiono regresar, entonces la Terminal los identifica correctamente en el mismo orden, pero no es útil a menos que al menos etiqueta cada tipo de archivo de manera diferente.

Creo que esta tarea inicial es demasiado difícil para Automator, pero me encantaría que se demuestre lo contrario.

Cualquier ayuda para hacer esto sería apreciada. He consultado este foro y en otros lugares esperando que otra persona haya tenido un problema similar, pero no he encontrado ningún problema en ninguna parte.

    
pregunta Steve K 23.03.2015 - 10:52

1 respuesta

1

Esto es bastante fácil combinando algunas herramientas estándar:

  • file para buscar el tipo mime
  • tr para eliminar las barras (de lo contrario, tendría carpetas anidadas para diferentes grupos de archivos)
  • bueno, algunos comandos obvios mkdir y mv
for file in *
do
    mime=$(file --brief --mime-type "$file" | tr '/' '_')
    mkdir -p "$mime"
    mv "$file" "$mime/$file"
done

Alternativamente, también puedes listar directamente las extensiones de archivo para cada tipo de mime esperado y renombrarlas automáticamente de forma apropiada.

for file in *
do
    mime=$(file --brief --mime-type "$file")

    case "$mime" in
    "image/jpeg")
        extension="jpeg"
        ;;
    "text/plain")
        extension="txt"
        ;;
    "application/pdf")
        extension="pdf"
        ;;
    *)
        continue;
        ;;
    esac

    filename="${file%.*}"

    mv "$file" "$filename.$extension"
done

Tenga en cuenta que, por motivos de legibilidad, no me ocupé de los nombres de archivos que contienen espacios. Si los tiene, deberá aplicar uno de los patrones para tratar espacios en nombres de archivos . Como parece que no los tienes, los dejé afuera, ya que hacen que los scripts parezcan mucho más complicados que son.

    
respondido por el Jens Erat 23.03.2015 - 11:52

Lea otras preguntas en las etiquetas