我有一种情况,我有一些这样的输入文件:
M2U0001.MPG
M2U0180.MPG
Run Code Online (Sandbox Code Playgroud)
我想在目录中的每个类似命名的文件上运行一个命令(在 Bash shell 中)。我希望将当前文件名作为输入提供给此命令,并将文件名的修改版本作为输出文件提供。下面是一个例子:
ffmpeg -i M2U0001.MPG M2U0001_fixed.MPG
Run Code Online (Sandbox Code Playgroud)
我有使用 xargs 和 sed 的想法,但这是我得到的:
ls -1 *.MPG | xargs -I{} ffmpeg -i {} `echo {} | sed -r 's/[0-9]{2,}/&_fixed/'`
Run Code Online (Sandbox Code Playgroud)
但这会导致在两个位置都输出原始文件名。我完全以错误的方式解决这个问题吗?
我发现如果我像这样将文件名直接回显到嵌入的块中,它会起作用:
echo M2U0001.MPG | sed -r 's/[0-9]{2,}/&_fixed/'
Run Code Online (Sandbox Code Playgroud)
或者:
for i in *.MPG ; do ffmpeg -i $i `basename $i .MPG`_fixed.MPG ; done
Run Code Online (Sandbox Code Playgroud)
感谢joshbaptiste的提示。
归档时间: |
|
查看次数: |
4016 次 |
最近记录: |