Эта команда bash работает на OSX, но не на Busybox .. почему?
552
fingertwist
У меня есть этот bash one-liner, он отлично работает на OSX, но не на Linux, я подозреваю, что дистрибутив linux (Busybox) на моем Qnap как-то связан с этим.
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)
Почему ты просто не трубишь? В этом конкретном случае легче отладить, если вы конвейер.
theoden 9 лет назад
0
BusyBox не ваша типичная система Linux (то есть, в основном POSIX с некоторыми расширениями). Скорее BusyBox - это набор утилит, в которых не хватает многих функций. С другой стороны, скрипт, который вы можете запустить на BusyBox, скорее всего, будет запущен на других системах. Вопрос должен быть переименован в «BusyBox».
Thomas Dickey 9 лет назад
0
Хорошая идея, как мне передать каждый файл в ffmpeg?
fingertwist 9 лет назад
0
@ThomasDickey да, это то, что я подозреваю, не знаю, как обойти это, чтобы заставить мой единственный лайнер работать на Busybox ..
fingertwist 9 лет назад
0
Я бы не стал использовать его в качестве одной строки: создание сложного аргумента `-exec` в отдельный скрипт, вероятно, будет хорошей отправной точкой. Сохраняя простоту частей, вы можете точно определить ограничения, чтобы обойтись один за другим.
Thomas Dickey 9 лет назад
0
@ThomasDickey, хорошо, не труба, но самый простой цикл сделает это. `для i в $ (найти. -type f -name" * .mp4 "); do ffmpeg "..."; done`. Или трубка в `awk`, а затем в оболочку.
theoden 9 лет назад
0
1 ответ на вопрос
2
Des
Я подозреваю, что это основано на поиске срабатывания одиночной / двойной кавычки.
Обычно я всегда использую что-то подобное в файле сценария (скажем, 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
Быстрый и грязный скрипт, который должен работать.