Automator 将 Preview/Thumb 图像移动到与图像具有相似文件名的文件夹 (Applescript)
Automator Move Preview/Thumb image to Folder with similar FileName as the image (Applescript)
我有 2 个错误。
OBJECTIVE:在我的下载文件夹中我有:
文件夹:文件名 001
图片:文件名 001 preview.jpg
文件夹:文件名 002
图片:文件名 002 preview.jpg
文件夹:文件名 003
图片:文件名 003 preview.jpg
我希望 Automator 将所有预览移动到各自的文件夹中。
所以,我遵循了这个类似的 tutorial,到目前为止我得到了这个:
第 1)
on run {input, parameters}
return input
end run
2nd) 过滤查找器项目:种类是文件夹
3rd)变量的设置值:FilePath(图像必须去的路径)
4th) 在这一步我得到一个错误:检查动作属性(我是新人所以不知道)。
on run {input, parameters}
tell application "Finder"
set FileName to name of file input
end tell
end run
5th) 设置变量的值:FilePath(图像必须去的路径)
6th) Filter Finder Items: Kind is Image AND Name contains {FilePath} ( same path as folder name ).
{FilePath} 出现问题,Automator 不接受新创建的变量:FilePath,在包含字段中,新创建的变量名为 FilePath。
7th) 获取变量的值:FileName
8th) 将 Finder 项目移动到:FilePath
这是工作流程file。
您的工作流文件的 link 没有用,但没关系——感谢您尝试分享它,但是,在这种情况下,我可以没有它工作,因为我实际上要去从头开始:
根据您的工作流将如何设置以接收输入,您可以删除 获取指定的 Finder 项目 操作并允许工作流 运行 作为 Service,例如,其输入将是包含要处理的图像的文件夹。正如您所说,包含图像的是 Downloads 文件夹,我认为您不太可能将工作流程设置为 Folder Action.
出于测试目的,您可以保留 Get Specified Finder Items 操作并将我放在那里的 Example 文件夹替换为您的 下载 文件夹。
这是 运行 AppleScript 操作的代码,供您 copy/paste:
on run {input, parameters}
# input will be the folder containing the images, e.g. the Downloads folder
set [here] to the input
set suffix to "preview.jpg"
set my text item delimiters to {pi, space & suffix}
tell application "Finder"
set jpgs to the name of every file in here whose name ends with the suffix
repeat with jpg in jpgs
set this to the text items of jpg as text
set there to (a reference to the folder named this in here)
if not (there exists) then set there ¬
to make new folder in here ¬
with properties {name:this}
move the file named jpg in here to there
end repeat
end tell
end run
目标文件夹是否存在并不重要:如果存在,图像将被移动到合适的文件夹中;对于那些不这样做的人,文件夹是在移动图像之前创建的。
更新以回应评论
① Sometimes I have a string between "preview" and extension .jpg
or .png
② I'd like to also move the completed folders to a new folder /Users/sebba/BLENDER/BLENDS
鉴于您现在公开的文件名的可变性,我认为使用 shell 脚本而不是 AppleScript 来处理文件更容易。
删除 运行 AppleScript 动作并插入 运行 Shell Script 动作,使用以下选项:Shell:bin/bash
,传递输入: as arguments
.
删除出现在编辑字段中的任何示例代码并输入此代码:
cd ""
folder=()
while read -r file
do
folder+=("$(egrep -io '^.+ \d{3}' <<<"$file")")
[[ -d "${folder[@]: -1}" ]] || mkdir "${folder[@]: -1}"
mv -v "$file" "${folder[@]: -1}"
done <<<"$( ls | egrep -i '^.+ \d{3} preview.*\.(jpg|png)' )"
mv -v "${folder[@]}" "/Users/sebba/BLENDER/BLENDS"
这使用 正则表达式匹配 来挑选文件名:
- 从任何事情开始(但不是什么都不做);然后
- 后面跟着一个space,正好是三位数字,一个space,然后是“预览”这个词;然后
- 绝对跟随任何事物(包括任何事物);然后
- 以“.jpg”或“.png”结尾。
因此,它会将以下文件移动到给定的文件夹(如果文件夹不存在则创建,并覆盖同名文件):
My image_file 001 preview.foo bar.jpg
→My image_file 001/
004 2 001 preview.png
→004 2 001/
但以下文件不会受到影响:
001 preview.png
My image_file 01 preview.jpg
我有 2 个错误。
OBJECTIVE:在我的下载文件夹中我有:
文件夹:文件名 001 图片:文件名 001 preview.jpg 文件夹:文件名 002 图片:文件名 002 preview.jpg 文件夹:文件名 003 图片:文件名 003 preview.jpg
我希望 Automator 将所有预览移动到各自的文件夹中。
所以,我遵循了这个类似的 tutorial,到目前为止我得到了这个:
第 1)
on run {input, parameters}
return input
end run
2nd) 过滤查找器项目:种类是文件夹 3rd)变量的设置值:FilePath(图像必须去的路径) 4th) 在这一步我得到一个错误:检查动作属性(我是新人所以不知道)。
on run {input, parameters}
tell application "Finder"
set FileName to name of file input
end tell
end run
5th) 设置变量的值:FilePath(图像必须去的路径) 6th) Filter Finder Items: Kind is Image AND Name contains {FilePath} ( same path as folder name ).
{FilePath} 出现问题,Automator 不接受新创建的变量:FilePath,在包含字段中,新创建的变量名为 FilePath。
7th) 获取变量的值:FileName 8th) 将 Finder 项目移动到:FilePath
这是工作流程file。
您的工作流文件的 link 没有用,但没关系——感谢您尝试分享它,但是,在这种情况下,我可以没有它工作,因为我实际上要去从头开始:
根据您的工作流将如何设置以接收输入,您可以删除 获取指定的 Finder 项目 操作并允许工作流 运行 作为 Service,例如,其输入将是包含要处理的图像的文件夹。正如您所说,包含图像的是 Downloads 文件夹,我认为您不太可能将工作流程设置为 Folder Action.
出于测试目的,您可以保留 Get Specified Finder Items 操作并将我放在那里的 Example 文件夹替换为您的 下载 文件夹。
这是 运行 AppleScript 操作的代码,供您 copy/paste:
on run {input, parameters}
# input will be the folder containing the images, e.g. the Downloads folder
set [here] to the input
set suffix to "preview.jpg"
set my text item delimiters to {pi, space & suffix}
tell application "Finder"
set jpgs to the name of every file in here whose name ends with the suffix
repeat with jpg in jpgs
set this to the text items of jpg as text
set there to (a reference to the folder named this in here)
if not (there exists) then set there ¬
to make new folder in here ¬
with properties {name:this}
move the file named jpg in here to there
end repeat
end tell
end run
目标文件夹是否存在并不重要:如果存在,图像将被移动到合适的文件夹中;对于那些不这样做的人,文件夹是在移动图像之前创建的。
更新以回应评论
① Sometimes I have a string between "preview" and extension
.jpg
or.png
② I'd like to also move the completed folders to a new folder
/Users/sebba/BLENDER/BLENDS
鉴于您现在公开的文件名的可变性,我认为使用 shell 脚本而不是 AppleScript 来处理文件更容易。
删除 运行 AppleScript 动作并插入 运行 Shell Script 动作,使用以下选项:Shell:bin/bash
,传递输入: as arguments
.
删除出现在编辑字段中的任何示例代码并输入此代码:
cd ""
folder=()
while read -r file
do
folder+=("$(egrep -io '^.+ \d{3}' <<<"$file")")
[[ -d "${folder[@]: -1}" ]] || mkdir "${folder[@]: -1}"
mv -v "$file" "${folder[@]: -1}"
done <<<"$( ls | egrep -i '^.+ \d{3} preview.*\.(jpg|png)' )"
mv -v "${folder[@]}" "/Users/sebba/BLENDER/BLENDS"
这使用 正则表达式匹配 来挑选文件名:
- 从任何事情开始(但不是什么都不做);然后
- 后面跟着一个space,正好是三位数字,一个space,然后是“预览”这个词;然后
- 绝对跟随任何事物(包括任何事物);然后
- 以“.jpg”或“.png”结尾。
因此,它会将以下文件移动到给定的文件夹(如果文件夹不存在则创建,并覆盖同名文件):
My image_file 001 preview.foo bar.jpg
→My image_file 001/
004 2 001 preview.png
→004 2 001/
但以下文件不会受到影响:
001 preview.png
My image_file 01 preview.jpg