如何使“.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