基本名称未按预期工作

基本名称未按预期工作

如何使“.mkv”在目标文件名中消失?

$ echo a/b.mkv | xargs -I % echo ffmpeg -i "%" $(basename "%" ".mkv").mp4
ffmpeg -i a/b.mkv a/b.mkv.mp4

答案1

这与执行得太早无关,basename而是与basename "%" ".txt"执行得太早有关。尝试:

echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(basename "%" ".mkv").mp4'

主要目标basename是删除目录部分:GNU basename(1) 手册页说:“从文件名中删除目录和后缀”;所以,它按预期工作。如果你想保留目录部分:

echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(dirname "%")/$(basename "%" ".mkv").mp4'

还有其他解决方案,例如使用sed.例如:

$ echo a/b.mkv | sed 's/\.mkv$/.mp4/'
a/b.mp4

相关内容