applescript + проблема со сценарием оболочки

Я пишу скрипт для отслеживания отсутствующих кадров в рендере (тысячи файлов изображений). чтобы найти пронумерованные кадры в последовательности, я делаю это:

set thecontents to every paragraph of (do shell script
"while IFS= read -r -d '' file;
do echo \"$file\"|sed -E \"s|.*[^[:digit:]]0*([[:digit:]]+)\\..*|\\1|\" ;
done< <(find \"" & thefolderPPath & "\" -name \"*.*\" -print0)")

find находит все файлы, и sed удаляет из них все, кроме конечного номера - он соответствует числам, когда файл пронумерован как foo_001.bar (или даже если они foo3_001.bar), он ищет не цифру, за которой следует ряд цифр, за которым следует расширение точки, и отбрасывает все, кроме цифр.

Он работает в оболочке, если я запускаю его так (без экранирования)

while IFS= read -r -d '' file
do echo "$file"|sed -E "s:.*[^[:digit:]]0*([[:digit:]]+)\..*:\1:" 
done < <(find "/Volumes/foo/imagesequence/" -name "*.*" -print0)

он создает хороший список чисел, но в Applescript я получаю

"sh: -c: строка 0: синтаксическая ошибка рядом с неожиданным токеном `‹'

Любые идеи? Я могу реализовать это с помощью applescript, разбив функцию sed и функцию find на отдельные сценарии оболочки, но это намного медленнее.


person stib    schedule 04.11.2009    source источник


Ответы (1)


Похоже, здесь вы используете подстановку процесса bash:

<(find "/Volumes/foo/imagesequence/" -name "*.*" -print0)

Команда AppleScript do shell script всегда использует /bin/sh (семантика оболочки Posix), а подстановка процесса не поддерживается в Posix /bin/sh. Либо перепишите сценарий, чтобы избежать Bashизмов, либо следуйте рекомендациям здесь о том, как запустить сценарий оболочки AppleScript с другой оболочкой.

person Ned Deily    schedule 04.11.2009
comment
Ну, кто бы это? Спасибо. - person stib; 04.11.2009