Isso não está relacionado a basename
, mas ao fato de que basename "%" ".txt"
é executado muito cedo. Experimente:
echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(basename "%" ".mkv").mp4'
O objetivo principal de basename
é remover a parte do diretório: a página man GNU basename (1) diz: "strip director and suffix from filenames"; então, funciona como esperado. Se você quiser manter a parte do diretório:
echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(dirname "%")/$(basename "%" ".mkv").mp4'
Existem outras soluções, como sed
. Por exemplo:
$ echo a/b.mkv | sed 's/\.mkv$/.mp4/'
a/b.mp4