Terminal de Mac - Renombrar manteniendo los últimos 6 caracteres

1

Estoy usando el Terminal incorporado, y soy totalmente nuevo en esta codificación, así que necesitaré saber qué escribir exactamente cuando abro el Terminal. Además, por favor, no me dirija a ningún otro software. Así que digamos ...

  • Tengo una carpeta llamada "Power" en mi escritorio (sin las comillas alrededor de ella, por supuesto).

  • En esa carpeta hay varios archivos .tif con el siguiente nombre:

    • Washington, George-150987.tif
    • Lincoln, Abraham-755103.tif
    • Smith, Jack & Jill-102347.tif
    • Jones-Newman, Martha & John Newman-137881.tif
  • Estos nombres tienen una cosa en común. Todos tienen un número de 6 dígitos antes de la extensión, y siempre lo harán.

  • Quiero una forma de cambiar el nombre de un grupo grande de estos archivos manteniendo solo los últimos 6 dígitos. Demonios, si hay un código que podría cambiar el nombre manteniendo solo los números, ese sería EL MEJOR, porque en raras ocasiones, podría haber un

    Smith, Jane-108965 (mrs) .tif

Pero si no hay un código para eso, está bien, puedo usar otro software para deshacerme de eso (señora) en un segundo.

    
pregunta Jaron Burnette 06.01.2016 - 19:11

1 respuesta

6

¡Primero haga una copia de seguridad de los archivos!

Luego abre Terminal (, inicia un shell bash si no estás usando el shell predeterminado) y ejecuta

cd ~/Desktop/Power
\ls | while IFS= read f; do echo mv -vn "$f" "${f/*-/}"; done

Esto no cambiará el nombre, pero mostrará cómo se renombrará cada archivo. Si la salida se ve bien, ejecute

\ls | while IFS= read f; do mv -vn "$f" "${f/*-/}"; done

PS: Esto supone que el único - en los nombres de archivo es el que está justo antes del número.

Algunas explicaciones sobre lo que está pasando aquí:

  • \ls lista todos los archivos, el \ garantiza que no se produzca ninguna expansión de alias. La salida se alimenta a una tubería, pero no tenemos que preocuparnos por la salida de varias columnas porque ls en estos casos automáticamente asume -1
  • while ... do; ...; done recorre todas las líneas / archivos
  • IFS= read f lee un nombre de archivo de la entrada estándar en $f . El IFS= asegura que ninguno de los caracteres en la entrada estándar confunde a read en esperar dos valores en lugar de uno (técnicamente esto probablemente no sea necesario aquí, pero es una buena práctica de todos modos)
  • ${f/*-/} realiza la sustitución de cadenas en el valor de $f , en este caso reemplazando todo hasta e incluyendo el - con la cadena vacía. Consulte man bash (Expansión de parámetros) para obtener más información.
respondido por el nohillside 06.01.2016 - 19:36

Lea otras preguntas en las etiquetas