Я пишу скрипт для отслеживания отсутствующих кадров в рендере (тысячи файлов изображений). чтобы найти пронумерованные кадры в последовательности, я делаю это:
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 на отдельные сценарии оболочки, но это намного медленнее.