Ця команда bash працює на OSX, але не на Busybox .. чому?


0

У мене цей одношаровий bash, він працює нормально на 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'

ЕКСПРЕСІЯ може складатися з: -наступних символьних посилань Dereference. -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) -release (i686-pc-linux-gnu)


Чому ти просто не трубиш? У цьому конкретному випадку простіше відлагодити, якщо ви трубите.
Теоден,

BusyBox - це не ваша типова система Linux (тобто, здебільшого POSIX з деякими розширеннями). Швидше, BusyBox - це сукупність утиліт, які не мають багатьох функцій. З позитивного боку, сценарій, який можна запустити на BusyBox, швидше за все, буде працювати в інших системах. На питання слід сказати "BusyBox".
Томас Дікі

Хороша ідея, як би я передав кожен файл ffmpeg?
fingerwwist

@ThomasDickey Так, це те, що я підозрюю, не знаю, як обійти його, щоб змусити мій один лайнер працювати над Busybox ..
fingertwist

Я б не намагався це зробити як однолінійний: складання складного аргументу -execв окремий сценарій, ймовірно, буде гарною відправною точкою. Дотримуючись прості шматочки, ви можете чітко визначити обмеження для обходу один за одним.
Томас Дікі

Відповіді:


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

Швидкий і брудний сценарій, який повинен працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.