Как заставить bash-код работать со всеми файлами в папках и подпапках? - PullRequest
2 голосов
/ 05 июня 2019

У меня есть код, который использует ffmpeg для преобразования *.avi в *.mp4 для всех файлов в папке.Я хочу, чтобы он работал на всех папках и подпапках;и сохранить результат в этой подпапке.

Я уже пытался найти, но безуспешно

#!/bin/bash

for i in *.avi; 
do
    ffmpeg -i /location/"$i" -c:v libx264 -preset ultrafast \
       -strict -2 -n /location/"$(basename  "$i" .avi)".mp4
done

1 Ответ

1 голос
/ 05 июня 2019

Вы можете использовать find, чтобы найти подходящие файлы во всех подкаталогах:

find <top-dir> -iname "*.avi" | while read filename; do ffmpeg -i "$filename" ... "${filename%avi}mp4"; done

Замените ... параметрами ffmpeg.

Вы также можете использовать утилиту GNU parallel для распараллеливания обработки найденных файлов на нескольких процессорах:

find <top-dir> -iname "*.avi" | parallel -i -- ffmpeg -i "{}" ... "{.}.mp4"
...