applescript + shell脚本问题

时间:2009-11-04 05:00:35

标签: macos shell find 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)它也会查找非数字,接着是一系列数字,后跟一个点扩展名,除了数字之外的其他所有数字。

它可以在shell中运行,如果我像这样运行它(没有转义)

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行:语法错误附近   意外的标记`&lt;'

有什么想法吗?我可以通过将sed函数和find函数分解为单独的shell脚本来使用applescript实现它,但这样做会慢一些。

1 个答案:

答案 0 :(得分:2)

您好像在这里使用bash进程替换:

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

AppleScript do shell script命令始终使用/bin/shPosix shell语义),Posix /bin/sh不支持进程替换。重写脚本以避免Bash - isms或遵循有关如何使用其他shell运行AppleScript shell脚本的建议here