我正在编写一个脚本来跟踪渲染中丢失的帧(数千个图像文件)。为了找到序列中编号的帧,我这样做:
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实现它,但这样做会慢一些。
答案 0 :(得分:2)
您好像在这里使用bash
进程替换:
<(find "/Volumes/foo/imagesequence/" -name "*.*" -print0)
AppleScript do shell script
命令始终使用/bin/sh
(Posix
shell语义),Posix /bin/sh
不支持进程替换。重写脚本以避免Bash
- isms或遵循有关如何使用其他shell运行AppleScript shell脚本的建议here。