У меня есть этот bash one-liner, он отлично работает на OSX, но не на Linux, я подозреваю, что дистрибутив linux (Busybox) на моем Qnap как-то связан с этим.

Вот команда, которая работает на OSX:

find . -type f -name "*.mp4" -exec bash -c 'ffmpeg -i "$0" -c:v copy -c:a libfaac -af "volume=23dB" "fix/$0"' '{}' \;

Теперь о Qnap:

find . -type f -name "*.mp4" -exec bash -c 'ffmpeg -i "$0" -c:v copy -c:a libfaac -af "volume=23dB" "fix/$0"' '{}' \;

возвращает:

BusyBox v1.01 (2015.05.21-17: 32+0000) двоичный файл с несколькими вызовами

Использование: найти [ПУТЬ ...] [Выражение]

Поиск файлов в иерархии каталогов. PATH по умолчанию является текущим каталогом; EXPRESSION по умолчанию - '-print'

ВЫРАЖЕНИЕ может состоять из: -Следовать Разыменовать символические ссылки. -name PATTERN Имя файла (удаленные ведущие каталоги) соответствует PATTERN. Печать отпечатка (по умолчанию и предполагается).

-тип X Тип файла соответствует X (где X - одно из: f, d, l, b, c, ...) - PERM PERMS Разрешения соответствуют любому из (+NNN); все (-NNN); или точно (NNN) -mtime TIME Модифицированное время больше, чем (+N); меньше чем (-N); или точно (N) дней

Например, если команда find не работает, поэтому, если я выполню только команду find :

find . -type f -name "*.mp4"

он работает просто отлично, я получаю все свои файлы, поэтому я подозреваю, что проблема заключается в передаче файлов в команду exec , и вот где я не могу понять это


bash версия osx : GNU bash, версия 3.2.57(1)-релиз (x86_64-apple-darwin14)

bash версия linux : GNU bash, версия 3.2.57(1)-релиз (i686-pc-linux-gnu)

1 ответ1

2

Я подозреваю, что это основано на поиске срабатывания одиночной / двойной кавычки.

Обычно я всегда использую что-то подобное в файле сценария (скажем, conv.sh) для более сложных операций:

find . -type f -name "*.mp4" | while read FILE
do
  ffmpeg -i "$FILE" -c:v copy -c:a libfaac -af "volume=23dB" "fix/$FILE"
done

Теперь запустите этот файл с отладкой:

bash -xv ./conv.sh

Быстрый и грязный скрипт, который должен работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .