[Automator & AppleScript] Automator: 入力がファイルかフォルダかを判別する
file, folder と package folder の3種類が存在する。
最初にこのあたりを眺めていて、いろいろな手法があるので混乱してました。
下記を試しながら、file, folder と package folder の3種類を区別できるということで、スッキリしました。
Contents
info for で対象の情報を取得する
info for
で対象情報を拾ってみる。
on run {input}
set src to input
return info for src
end run
folder:true, package folder:false
という両方の値を見る必要があることが分かる。
file
{name:"ci1.png", creation date:date "2013年12月13日金曜日 20:55:46", modification date:date "2013年12月13日金曜日 20:56:31", size:21734, folder:false, alias:false, package folder:false, visible:true, extension hidden:false, name extension:"png", displayed name:"ci1.png", default application:alias "Macintosh HD:Applications:Preview.app:", kind:"PNG イメージ", file type:"", file creator:"", type identifier:"public.png", locked:false, busy status:false, short version:"", long version:""}
folder
{name:"docs", creation date:date "2013年12月18日水曜日 15:58:24", modification date:date "2013年12月18日水曜日 15:58:33", size:272378, folder:true, alias:false, package folder:false, visible:true, extension hidden:false, name extension:missing value, displayed name:"docs", default application:alias "Macintosh HD:System:Library:CoreServices:Finder.app:", kind:"フォルダ", folder window:{0, 0, 0, 0}, file type:"", file creator:""}
package folder
.app や .workflow もこの形式。
{name:"OpenInTerminal.workflow", creation date:date "2014年2月9日日曜日 17:30:33", modification date:date "2014年2月9日日曜日 17:30:33", size:69362, folder:true, alias:false, package folder:true, visible:true, extension hidden:true, name extension:"workflow", displayed name:"OpenInTerminal.workflow", default application:alias "Macintosh HD:Applications:Automator.app:", kind:"ワークフロー", short version:missing value, long version:missing value, bundle id:missing value, file type:"BNDL", file creator:"????", type identifier:"com.apple.automator-workflow", busy status:false}
入力がファイルかフォルダかを判別する
このあたりを参考に比較したり、サブルーチン化したり。
on run {input}
set src to input
--return info for src
try
-- file -b コマンドを利用する
--set result to isDirectory(src)
-- info for を利用する
set result to isDirectoryRenew(src)
return result
end try
end run
-- file -b コマンドを利用する
on isDirectory(someItem)
set filePosixPath to quoted form of (POSIX path of (someItem as alias))
set fileType to (do shell script "file -b " & filePosixPath)
if fileType ends with "directory" then return true
return false
end isDirectory
-- info for を利用する
on isDirectoryRenew(someItem)
set isFolder to (folder of (info for someItem))
set isPackageFolder to (package folder of (info for someItem))
if isFolder and not isPackageFolder then return true
return false
end isDirectoryRenew