Archivos de audio modificados por un command bash que los renombra

Hoy presento un caso de una consecuencia inesperada de un command de shell en algunos files de audio que no entiendo en absoluto.

Aquí están los hechos:

  1. Mi sistema operativo es ArchLinux, el administrador de Windows es impresionante y el terminal utilizado es Konsole.

  2. Tener muchos directorys y files que contienen espacios y / o caracteres específicos como ',{,[,?,! Quería cambiarles el nombre eliminando espacios y / o caracteres específicos.

  3. Buscando un command de shell, encontré este para replace (por ejemplo) el carácter _ por un . :

$ find ./ -type f -exec sed -i -e 's /_/./ g' {} \;

  1. Utilicé este command en muchos directorys en los que se cambió el nombre de todos los files como se esperaba, y quedé contento con él.

Pero

  1. Teniendo algunos directorys que contienen algunos files de audio que quería cambiar el nombre, apliqué este command bash en estos directorys. Contrariamente a los usos anteriores, el process fue más largo y al final el resultado no fue el esperado. En primer lugar, la mayoría de los files no han sido renombrados. En segundo lugar, todos los files de audio (mp3, flac, …) han sido alterados / dañados y ya no están identificados por ningún lector de files de audio. Por el contrario, los files de audio en los que no usé el command bash siempre tienen la razón y se pueden leer.

Por ejemplo, cuando trato de leer uno de los files alterados con smplayer, el post de error es: MPlayer / mpv ha finalizado inesperadamente. Código de salida: 2. El file de logging agrega: 'Error al reconocer el formatting de file'.

Refiriéndome a la primera respuesta, doy a continuación información adicional sobre los efectos de la alteración.

Habiendo usado 3 commands para get lo que quería:

  • encuentre ./ -type f -exec sed -i -e 's /_/./ g' {} \;

  • encuentre ./ -type f -exec sed -i -e 's / /./g' {} \;

  • encuentre ./ -type f -exec sed -i -e 's /.././ g' {} \;

Aquí hay algunos ejemplos de nombres de files antes> después de la corrupción:

1 _-_ Bob_The_Sponge _-_ Living under the Sea.flac> 1 .-. Bob.The.Sponge.-. Living.under the Sea.flac (tenga en count que algunos espacios todavía están presentes)

2 _-_ Bob_The_Sponge _-_ Nemo_my_friend.mp3> 2 .-. Bob_The.Sponge .-. Nemo my.friend.mp3 (tenga en count que uno '_' no se ha eliminado y se ha agregado un espacio en el nombre).

Todos los casos no pueden ser reproducidos aquí, algunos nombres de files han sido cambiados, otros parcialmente, otros son como antes.

El peso de los files alterados no ha cambiado, ni los derechos de estos files. Solo la date de la última modificación ha cambiado.

Naturalmente, me gustaría entender lo que sucedió. Traté de encontrar explicaciones con diferentes browseres pero no encontré ningún problema similar o cercano.

Entonces, mis preguntas son:

  1. ¿Por qué este command bash parece haber alterado estos files de audio?
  2. ¿Por qué este command tiene efecto en este tipo de file y no en los otros?
  3. ¿Cuál podría ser la solución para revertir los daños de este command en estos files?

Usaste el siguiente command

 find ./ -type f -exec sed -i -e 's/_/./g' {} \; 

Lo que esto básicamente hace es

 sed -i -e 's/_/./g' filename 

para cada file encontrado por el command find . sed pasa por sus files, línea por línea, y el command s (sustituto), reemplaza cada _ por a . . Y como está utilizando la -i , esto sucede en línea. ¡No es de extrañar que tus files se hayan corrompido!

No podrá reproducir sus files antiguos. Cambiaste _ , y .. a . . Todo lo que sabes es que cada uno . en sus files, podría ser uno de estos caracteres (o a).