将 bash % 与 xargs % 结合起来

将 bash % 与 xargs % 结合起来

本文说你可以使用%语法来删除文件扩展名:

$ s=a/b.mkv
$ echo ${s%.*}
a/b

如何将%语法与%in结合起来xargs以获得一组行的所需结果?

$ cat | xargs -I % echo ffmpeg -i % (INSERT MAGIC HERE)
a/b.mkv
ffmpeg -i a/b.mkv a/b.mp4
c/d.mkv
ffmpeg -i c/d.mkv c/d.mp4

答案1

根据给出的评论,我找到了一个简短而漂亮的解决方案:

find . -name '*.mkv' | while read f; do echo ffmpeg -i "$f" "${f%.*}.mp4"; done

答案2

根据之前的答案,您还可以使用zsh.如果这是你的外壳:

for i in **/*.mkv; echo ffmpeg -i $i $i:r.mp4

否则:

zsh -c 'for i in **/*.mkv; echo ffmpeg -i $i $i:r.mp4'

这将避免文件名中出现空格问题。

相关内容