我主要是一个Windows的人,并有相当数量的脚本能力在PowerShell。不过,最近由于Linux的流行,我对学习bash很感兴趣。
无论如何,我已经有一个通用脚本,用于根据某些视频文件的扩展名编码它们。虽然这是非常基本的,也不足以让我感到满意。为了帮助我更好地理解bash,我希望有人能向我展示可以递归执行的代码,而不管目录有多深。
encode.sh
for INF in "/mnt/usbhdd"/**/**/**/*.mkv
do
ffmpeg -i "$INF" -c:v libx264 -preset veryfast -crf 22 -profile:v main -level:v 4.0 -c:a aac -ac 2 -ab 320k "${INF%.*}.m4v"
done正如您所看到的,第一行无论如何都不是理想的,我使用nohup运行这个脚本,这样它就可以运行到完成为止。
如果您可以创建递归执行的代码(可能设置父文件夹)并解释任何更改,我将非常感谢您对学习的帮助。
发布于 2020-01-05 11:22:27
Kudos to @kvantour指南:
shopt -s globstar
for f in /mnt/usbhdd/**/*.mkv; do ls "$f"; done或
find /mnt/usbhdd/ -name '*.mkv'最后解决办法:
shopt -s globstar;
for f in /mnt/usbhdd/**/*.mkv
do
ffmpeg -i "$f" -c:v libx264 -preset veryfast -crf 22 -profile:v main -level:v 4.0 -c:a aac -ac 2 -ab 320k "${f%.*}.m4v"
done https://stackoverflow.com/questions/59597705
复制相似问题