Cambio masivo del nombre del archivo condicional

0

He estado organizando mucho mis archivos usando comandos de terminal (principalmente para educación terminal adicional). He aprendido sobre el cambio de nombre masivo en el terminal, por ej. reemplazando todos los guiones bajos con espacios, cambios de mayúsculas, etc.

Lo que estoy tratando de hacer ahora es insertar un carácter, o conjunto de caracteres, ya sea en un lugar específico en el nombre del archivo o condicionalmente.

Esencialmente, estoy tratando de agregar un guión "-" entre el número de pista y el título de una lista de archivos de audio.

Entonces, donde tengo:
"01 First Track.mp3"
"02 Second Song Title.mp3"
"03 Third.mp3"
"04 Cuarto y Final One.mp3"

Me gustaría reemplazar "" en la tercera posición para que sea "-", dejando:
"01 - First Track.mp3"
"02 - Second Song Title.mp3"
"03 - Tercera Cosa.mp3"
"04 - Cuarto y Final One.mp3"

¿Hay una manera de agregar un carácter condicionalmente? Diga, compruebe un número (algo entre 0-9) y reemplace el carácter directamente después por otro carácter. Lógicamente: para i en *; si $ i === "0-9" y + === "reemplaza + con" - ".... ¿algo así?

Alternativamente, ¿podría simplemente apuntar a la tercera posición del nombre de archivo e insertar "-"?

El problema con simplemente reemplazar TODOS "" con "-" es que esto reemplazaría cada espacio en el nombre del archivo con un guión.

¿Quizás hay una manera de considerar solo la primera instancia del "" nombre del archivo e ignorar las instancias posteriores?

Pero me gustaría saber si hay una manera de reemplazar los caracteres condicionalmente. He estado buscando en Google con:
"Terminal masivo reemplazar carácter condicional"
"Unix batch file name conditional"

y similares, pero hasta el momento solo se ha encontrado la eliminación / reemplazo de caracteres, o simplemente la adición (es decir, reemplazar todas las X por Y, o para cada archivo, agregue un número secuencial al principio).


Muchas gracias.

    
pregunta personguy 21.07.2014 - 01:52

1 respuesta

1

Probablemente quieras usar expresiones regulares para esto. Dependiendo de la versión de tu pregunta, es bastante sencillo. Hay una serie de buenos sitios para comenzar con lo básico. En cierto sentido, ya lo has visto un poco: el "*" en "* .mp3" es un concepto de expresiones regulares (que significa "coincidir con cualquier símbolo 0 o más veces"). Intente algo como ( enlace ) o ( enlace ) .

La versión simple de su pregunta es realmente muy simple, por lo que puede salirse con la suya con este enfoque:

echo '01 ab cd.mp3' | sed 's/ / - /'

Este comando sed es básicamente una búsqueda y reemplazo definidos por expresiones regulares. Encuentra '' y lo reemplaza por '-', solo la primera vez. (Mucho más sobre sed aquí: enlace )

También me sorprendería si no hubiera una serie de scripts y cosas específicamente para procesar nombres de archivos de mp3 que ya lo hagan por ti, pero no hay razón para que no puedas hacerlo tú mismo en la Terminal.

    
respondido por el Jeremy Needle 21.07.2014 - 03:05

Lea otras preguntas en las etiquetas