2015-07-10 2 views
-1

Я использую Mac's Automator для выполнения сценария bash для файлов, которые выпадают на капельку. Входы собираются из действий Automator и передаются в сценарий bash в качестве аргументов. Скрипт работает с одним входным файлом, но у меня возникают проблемы с обработкой нескольких файлов.Выполнение сценария bash на нескольких входных файлах, игнорирование других входных переменных

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

я могу перебрать входов с помощью специальной переменной [email protected], например, так:

for f in "[email protected]"; do 
    # perform an action 
done 

Однако мой сценарий также предлагает пользователю для ввода текста, который я не хочу, включенных в эту петлю.

Я могу получить доступ к каждому входному файлу индивидуально, используя $1, $2 и т. Д. Но я бы хотел использовать цикл вместо ссылки на каждый файл отдельно. Кроме того, количество входных файлов непредсказуемо, и я не уверен, как различать входные файлы и входной текст.

Как я могу прокручивать только входные файлы без ввода текста?

Вот описание моего текущего рабочего процесса:


задавалась Фильмы

one.mov
два.мы

Установить значение переменной (принимает вход)

SOURCE_FILES

Попросить Текст (игнорирует вход)

Введите номер:

Установить значение переменной (принимает вход)

номер

Получить значение переменной (игнорирует входные)

SOURCE_FILES

Получить значение переменной (принимает входной)

номер

Run Shell Script (принимает входной сигнал, проходят "в качестве аргументов")

#/bin/bash 

for f in "[email protected]"; do 
    echo $f 
done 

ВЫХОД:

/folder/one.mov
/folder/two.mov

Я надеялся иметь один набор переменных для множества входов (таким образом я мог цикл через него) и другая переменная установлена ​​на число, но похоже, что это не так.

Как я могу прокручивать каждый входной файл без ссылки на ввод текста?

+0

Are вы просто пытаетесь выяснить, как проверить, является ли данный аргумент существующим файлом? –

+0

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

+0

Сколько у вас переменных ввода текста? Только _number_? –

ответ

2

Просто измените порядок аргументов: получить значение переменной number первой, затем получить значение переменной source_files, так что number будет первым параметром,

затем:

echo number: $1 
for f in "${@:2}"; do 
    echo file: $f 
done 
+0

Nice и простой. Наверное, я делал вещи сложнее, чем мне нужно. 'shift' полезен. Благодаря! – showdev

+2

Технически нет необходимости в 'shift'. Вместо этого вы можете использовать '' $ {@: 2} "'. Найдите 'offset' в разделе [Shell Parameter Expansion] (http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion) в справочном руководстве bash. –

+0

@EtanReisner Эй, это круто спасибо. Таким образом, мне не нужно деструктивно манипулировать исходным набором входов. Я также ценю ссылку. – showdev