Cambiar el nombre de un archivo pasando una salida awk en un archivo *.tsv

Cambiar el nombre de un archivo pasando una salida awk en un archivo *.tsv

Contar con datos y *.tsvarchivo donde se describen los datos. Me gustaría utilizar la descripción y cambiar el nombre de los datos en consecuencia.

Por favor échale un vistazo :

  • awkcomando para filtrar el tsv da esto:

      common_voice_en_22090684.mp3 four
      common_voice_en_22090691.mp3 no
      common_voice_en_22090696.mp3 one
    
  • pasa por el directorio donde se *.mp3encuentran:

    for i in *.mp3 ; do
    echo $i
    
  • mves un comando para cambiar el nombre del archivo y se necesitan dos argumentos (el archivo a cambiar y con qué)

¿Cómo usar awk(leer y usar la descripción) y mv(cambiar el nombre de los archivos existentes con la descripción pasada? Entonces, mirando el ejemplo anterior, el resultado sería:

four.mp3    
no.mp3  
one.mp3 

No es importante utilizar los comandos sugeridos. ¡Cualquier idea o sugerencia sobre cómo hacer esto es bienvenida!

Respuesta1

Esto no cumple con sus requisitos, pero si espera procesar muchos archivos, puede obtener un mejor rendimiento usando su .tsv como controlador en lugar de una expansión de shell, porque no abrirá el tsv una vez por mp3. Elimine el echosi parece que haría lo que espera.

$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv

Respuesta2

IIUC, quieres algo como esto después de guardar el resultado decomando awk para filtrar el tsven archivo:

#!/usr/bin/env sh

for i in *.mp3
do
    new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
    if [ -n "$new_name" ]
    then
        echo mv -- "$i" "$new_name"
    fi
done

Elimínelo echopara realizar el cambio de nombre, pero ejecútelo primero para asegurarse de que sea lo que necesita. También tenga en cuenta que existe una pequeña posibilidad de que mvfalle porque el archivo original ya estará eliminado cuando la ejecución del script llegue a esa línea; puede usar set -epara salir inmediatamente después del primer mverror.

información relacionada