Я использую простой сценарий для создания .mp3s из .mp4 файлов:
#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
done
Сценарий хорошо работает, когда выполнено от рабочего стола или названный через терминал. Когда сценарий называют из внешнего сценария однако, ему не удается работать, возвращаясь
"*.mp4: никакой такой файл или каталог".
Я подозреваю, что проблема с расширением оболочки, но не может перенести мою голову, как зафиксировать его в этой ситуации.
Вы используете относительный путь, где Ваш сценарий ищет эти .mp4
файлы в текущем каталоге т.е. каталоге от того, где скрипт запускается, и находя, что никакой такой .mp4
файл существует, затем он ищет литерал *.mp4
файл (принимающий nullglob
/ failglob
, не установлен, который является значением по умолчанию), и тот файл не существует также, следовательно сообщение об ошибке *.mp4: No Such File or Directory
.
, необходимо использовать полный путь вместо этого:
for i in /directory/*.mp4; do ...; done
Замена /directory/
с фактическим путем к каталогу; если Вы хотите Вас, может взять имя каталога в качестве первого аргумента также:
for i in "$1"/*.mp4; do ...; done
можно использовать полный или относительный путь здесь, но снова полный путь всегда является более безопасной опцией.
Теперь называют исполняемый сценарий обычным способом:
/path/to/script.sh /directory
Из каталога сценария:
./script.sh /directory