Duda de BASH: ¿Cómo eliminar la extensión?

Dado este comando:

mkvmerge -o ./carpeta/X.mkv -S X.mkv X.srt


Tengo una carpeta llena de .mkv y de.srt. Quiero coger todos y hacerles ejecutar ese comando.

He intentado:

1º Buscar en la carpeta todos los archivos *.mkv
2º Ejecutar mkvmerge para cada ocurrencia
3º ¿Y ahora qué? [+risas]

find -iname \*.mkv -exec mkvmerge -o ./modificado/{} -S {} $(¿Cómo eliminar la extensión?).srt \;


He probado sed, el problema esque lee de la entrada estándar. Y yo quiero que me coja el {} como argumento.

EDITO:

Solucionado, no es la mejor forma pero:
find -iname \*.mkv |  sed 's/.\{4\}$//' | parallel mkvmerge -o ./modificado/{}.mkv -S {}.mkv {}.srt
Zokormazo escribió:@amchacon:

man basename

Ya lo probé pero no funcionaba bien al combinarlo con find :(

Pero ya he descubierto una forma aún más sencilla:
parallel mkvmerge -o ./modificado/{} -S {} {.}.srt ::: *.mkv
amchacon escribió:
Zokormazo escribió:@amchacon:

man basename

Ya lo probé pero no funcionaba bien al combinarlo con find :(

Pero ya he descubierto una forma aún más sencilla:
parallel mkvmerge -o ./modificado/{} -S {} {.}.srt ::: *.mkv

Esta si que me gusta, no la conocía.

En vez de usar find no era mejor usar un for? Vaya yo es lo primero que hubiera hecho.
lovechii5 escribió:
amchacon escribió:
Zokormazo escribió:@amchacon:

man basename

Ya lo probé pero no funcionaba bien al combinarlo con find :(

Pero ya he descubierto una forma aún más sencilla:
parallel mkvmerge -o ./modificado/{} -S {} {.}.srt ::: *.mkv

Esta si que me gusta, no la conocía.

En vez de usar find no era mejor usar un for? Vaya yo es lo primero que hubiera hecho.

También, esa vale.

Con parallel lo bueno esque va lanzando varios trabajos en paralelo, aquí esto no influye porque es todo IO, pero para conversiones de formatos va muy bien.
5 respuestas