как избежать пробела в имени файла?

У меня есть куча файлов, которые нужно конвертировать из .mp4 в .mpeg.one. Мой друг предложил мне этот простой сценарий. Однако это не работает, потому что имена файлов содержат пробелы.

Вот сценарий:

for f in $(ls *.mp4); do ffmpeg -i "$f".mp4 "$f".mprg; done
3
задан 3 February 2013 в 16:36

3 ответа

В этом случае вам не нужно использовать ls. Как правило, всегда старайтесь использовать встроенные функции оболочки и глобальные функции, а не полагаться на внешние программы (например, ls), которые могут создавать проблемы с уродливыми обходными путями.

Кроме того, вы не должны «вручную» добавлять расширение к имени входного файла (которое вы даете -i), и вы должны удалить расширение в выходном файле.

Таким образом, команда должна быть:

for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}".mprg; done
0
ответ дан 3 February 2013 в 16:36
  • Нет ls необходимо
  • Вы, вероятно, имеете в виду .mpeg как расширение
  • Если вы поместите " вправо, пробелы не станут проблемой
  • [ 118] ffmpeg -i "$f".mp4 в вашей команде будет искать, например, files.mp4.mp4, который вы, вероятно, не имели в виду
  • Помните, что ваши выходные файлы будут называться, например, files.mp4.mpeg

Возможное решение:

for f in *.mp4; do ffmpeg -i "$f" "$f".mpeg; done
0
ответ дан 3 February 2013 в 16:36

Вместо ls вы можете использовать find -print0 и xargs -0:

find -name '*.mp4' -print0 | xargs -0 -n1 ffmpeg -i '{}' '{}'.mpeg

, а затем переименовать:

rename s/mp4.mpeg$/mpeg/ *.mp4.mpeg
0
ответ дан 3 February 2013 в 16:36

Другие вопросы по тегам:

Похожие вопросы: