He hecho una carpeta acción AppleScript que principalmente recibe el nombre de la carpeta con la ruta de la carpeta y llama a un script de ruby con la ruta de acceso, como el argumento. Este funciona perfectamente, pero hay una manera de poner este rubí archivo dentro de la AppleScript como una variable, así que no tengo que lidiar con dos archivos?
Soy nuevo en esto así que si se proporciona un ejemplo sería genial. Gracias.
Estoy intentando el código que se indican a continuación, pero recibiendo un error "-e:82: error de sintaxis, el inesperado final de la entrada, esperando keyword_end" número 1.
Según las instrucciones, he copiado el archivo y se inserta el escape \ personaje, no se ha cambiado ningún código. la tercera línea de comentarios va a ejecutar el programa sin ningún error.
set folder_name to quoted form of "/Volumes/HackSSD/Testing Space"
display dialog folder_name
--set makeDateFolders to "/Users/raj/Documents/ivfolders.rb " & folder_name
set rubyScript to "# ivfolder.rb
require 'set'
require 'benchmark'
require 'date'
require 'fileutils'
require 'open3'
raise ArgumentError, 'Expecting single command-line value' if ARGV.length > 1
def file_created_date(ivfile)
# Not all images have a uniform EXIF/IPTC tag name for created date/time.
# Use exiftool if installed and attempt three different date tags. If these
# find no creation date, return the System creation date.
# returns created_date as 'yyyy-mm-dd' string
exiftool = '/usr/local/bin/exiftool'
create_date = ''
if File.exist?(exiftool)
create_date, = Open3.capture2(exiftool, '-s3', '-d', '%F',
'-DateTimeOriginal',
'-FileModifyDate',
'-CreateDate',
ivfile)[0]
if create_date && create_date.count(\"\\n\") > 1
# n-tuple dates found, usually the same, but take oldest if present.
datestr = create_date.split(\"\\n\").min
elsif create_date
# one date, likely the FileModifyDate. Remove trailing newline
datestr = create_date.chomp
end
return datestr unless create_date.empty?
end
File.birthtime(ivfile).strftime('%F') if create_date.empty?
end
# check folder name to see if it is in YYYY-MM-DD format
def valid_date?(str, format = '%F')
Date.strptime(str, format)
rescue ArgumentError
false
end
# file excluded if not in this set.
extensions = Set.new(['.cr2', '.cr3', '.nef', 'dng', '.arw', '.gif', '.jpg',
'.jpeg', '.jp2', '.png', '.ai', '.psd', '.svg', '.tif',
'.tiff', '.heic', '.heif', '.mp4', '.hevc', '.mov',
'.m4v', '.avi', '.mts', '.mpg'])
folders = Set.new
matched_files = Set.new
filecnt = 0
foldercnt = 0
elapsed = Benchmark.realtime do
start_folder = File.expand_path(ARGV.first)
Dir.chdir(start_folder) do
Dir.glob(\"#{start_folder}/*.*\").select do |f|
matched_files << f if extensions.include?(File.extname(f.downcase))
end
# if previous run, collect existing folders matching yyyy-mm-dd
Dir.glob(\"#{start_folder}/*\").select do |f|
z = File.basename(f)
folders << z if valid_date?(z) && z.length == 10
end
matched_files.each do |f|
# create_date = File.birthtime(f).strftime('%F') # yyyy-mm-dd
create_date = file_created_date(f)
FileUtils.mkdir(create_date, mode: 0o0755, verbose: false)
unless folders.include?(create_date)
folders << create_date
FileUtils.mv(File.basename(f), create_date, verbose: false)
end
filecnt = matched_files.count
foldercnt = folders.count
end
end"
do shell script ("ruby -e " & (quoted form of rubyScript) & space & folder_name) -- run it
En mi carpeta de secuencia de comandos de acción que está trabajando bien estoy tomando el cuidado de cuando la carpeta de la acción se desencadena una vez que se crea una carpeta, el guión de trabajo que se dan a continuación. Como se mencionó anteriormente quiero incrustar el script de ruby no molestarse con un archivo externo. La Carpeta De Trabajo De Action Script
on adding folder items to this_folder after receiving added_items
try
repeat with theCurrent_item in added_items
set filePosixPath to quoted form of (POSIX path of (theCurrent_item as alias))
set fileType to (do shell script "file -b " & filePosixPath) --Test if it is a directory
if fileType = "directory" then
return
end if
end repeat
set folder_name to quoted form of (POSIX path of (this_folder as alias))
set makeDateFolders to "/Users/raj/Documents/ivfolders.rb " & folder_name
do shell script makeDateFolders
end try
end adding folder items to