Для преобразования файлов MOV в mp4 в каталоге я использовал (я использую больше команд с avconv, но я сократил для syntetize):
for f in *.MOV; do echo "Converting $f"; avconv -i "$f" "${f:0: -4}.mp4"; done
И это работает. Он конвертирует каждый файл.
Но теперь я хочу преобразовать все файлы в каталоге и во всех подкаталогах (рекурсивно). Я попытался:
for f in "$(find ./ -name '*.MOV')"; do echo "Converting $f"; avconv -i "$f" "${f:0: -4}.mp4"; done
Но это не работает, потому что выводит:
mario@circo3d:~/Imágenes$ for f in "$(find ./ -name '*.MOV')"; do echo "Converting $f"; avconv -i "$f" "${f:0: -4}.mp4"; done
Converting ./2015-05-23 Tutorial Masa de colores/MVI_9219.MOV
./2015-05-23 Tutorial Masa de colores/MVI_9196.MOV
./2015-05-23 Tutorial Masa de colores/MVI_9199.MOV
./2015-05-23 Tutorial Masa de colores/MVI_9200.MOV
avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
./2015-05-23 Tutorial Masa de colores/MVI_9219.MOV
./2015-05-23 Tutorial Masa de colores/MVI_9196.MOV
./2015-05-23 Tutorial Masa de colores/MVI_9199.MOV
mario@circo3d:~/Imágenes$
(последний список файлов отображается красным цветом)
Кажется, что find работает, он входит в каждую директорию и также echo "Converting $f"... но avconv получает все эти имена файлов в виде списка с символами новой строки, а не каждый один элемент из цикла for.
Почему echo работает, а avconv нет?
Or...
Почему for f in *.MOV' работает с avconv, а for f in "$(find ./ -name '*.MOV') не работает?
for f in "$(find ./ -name '*.MOV')"; do echo "$f"; done
? То есть он находит все файлы — и только все — которые вы хотите обработать? - person fedorqui 'SO stop harming'   schedule 29.07.2015