当前位置:  开发笔记 > 编程语言 > 正文

bash中的for循环通过具有两个特定扩展名的文件

如何解决《bash中的for循环通过具有两个特定扩展名的文件》经验,为你挑选了1个好方法。

我希望以下循环遍历m4a文件和webm文件。目前,我使用了两个不同的循环,另一个循环只是替换了该循环中的所有m4a。ffmpeg输出的文件也应该删除m4a扩展名(如果它是m4a文件)和webm扩展名(如果它是webm文件)。并将其替换为mp3。(与m4a一样)。我不知道该怎么做,我认为它与正则表达式有关,但是我不知道如何真正使用它们,也没有找到一个好的教程/文档,所以如果您有的话,也请链接它。

for i in *.m4a ; do
        echo "Converting file $converted / $numfiles : $i"
        ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i/.m4a}.mp3"
        mv "$i" ./done
        converted=$((converted + 1))
done

mklement0.. 5

请尝试以下操作:

for i in *.m4a *.webm; do
  echo "Converting file $converted / $numfiles : $i"
  ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i%.*}.mp3"
  mv "$i" ./done
  converted=$((converted + 1))
done

您可以使用for具有模式(水珠),如下所示:*.m4a *.webm将扩大到令牌的一个列表for遍历。

您可能需要shopt -s nullglob在循环之前添加,这样在没有匹配文件的情况下,它不会与未展开的模式一起输入。

${i%.*}.mp3使用参数扩展 -专门%用于最短后缀的删除-从文件名中删除所有现有扩展名,然后追加.mp3

请注意,以上技术使用的是模式,而不是正则表达式。虽然关系密切,但存在根本差异;模式更简单,但局限性更大;参见模式匹配。

PS:您可以简化converted=$((converted + 1))(( ++converted ))



1> mklement0..:

请尝试以下操作:

for i in *.m4a *.webm; do
  echo "Converting file $converted / $numfiles : $i"
  ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i%.*}.mp3"
  mv "$i" ./done
  converted=$((converted + 1))
done

您可以使用for具有模式(水珠),如下所示:*.m4a *.webm将扩大到令牌的一个列表for遍历。

您可能需要shopt -s nullglob在循环之前添加,这样在没有匹配文件的情况下,它不会与未展开的模式一起输入。

${i%.*}.mp3使用参数扩展 -专门%用于最短后缀的删除-从文件名中删除所有现有扩展名,然后追加.mp3

请注意,以上技术使用的是模式,而不是正则表达式。虽然关系密切,但存在根本差异;模式更简单,但局限性更大;参见模式匹配。

PS:您可以简化converted=$((converted + 1))(( ++converted ))

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有