AppleScript: Ho copiato la selezione Finder negli appunti. Posso ottenere il percorso completo per gli elementi copiati?
-
28-09-2019 - |
Domanda
Ho uno o più file e / o cartelle selezionate nel Finder. Ho manualmente copiarli negli appunti / cartone ( ⌘C ).
Per semplificare le cose, diciamo che ho appena copiato un unico file normale. La soluzione ideale, però, sarebbe che fare con molti file e una selezione mista con le cartelle, gli alias.
Ora che questo file è nella clipboard, voglio ottenere il percorso completo (preferibilmente il percorso POSIX).
Per risparmiare tempo:
- Sto cercando un AppleScript (o rb-appscript) soluzione.
- Non voglio per ottenere il percorso direttamente dalla selezione. Deve essere dalla voce negli Appunti.
- In realtà, so che posso percorso intorno a questo copiando il percorso (s) per la selezione, poi fare quello che sono fino a con esso.
Quello che so finora (indicato nella RB-appscript):
-
OSAX.osax.the_clipboard
ha una serie di nomi di file senza il percorso. -
Appscript.app('Finder').clipboard.get
è a quanto pare non implementata dizionario (dice "non ancora disponibile"; chiamando restituisce:missing_value
.
Soluzione
Il seguente AppleScript sembra fare il trucco:
POSIX path of (the clipboard as «class furl»)
Se non ci sono più elementi negli Appunti, verrà restituito il percorso POSIX del primo elemento unico.
Vedere anche la di riferimento dei comandi AppleScript per il comando the clipboard
.
Versione RB-appscript:
OSAX.osax.the_clipboard(:result_type => :file_url).path
Altri suggerimenti
Ecco un AppleScript che otterrà tutti i percorsi POSIX dagli appunti, non solo il primo ...
set theFiles to paragraphs of (get the clipboard)
set posixPaths to {}
repeat with aFile in theFiles
try
tell application "Finder" to set thePath to item aFile as text
set end of posixPaths to (POSIX path of thePath)
end try
end repeat
return posixPaths
appena ho pensato di condividere il codice di RB-appscript che ho scritto dopo la risposta di Sakra:
#!/usr/bin/arch -i386 /usr/bin/ruby
require "rubygems"
require "osax"
include OSAX
def path_from_clipboard
osax.clipboard_info.flatten.include? :file_url or raise "clipboard does not contain path data"
osax.the_clipboard.count("\r") == 0 or raise "clipboard contains more than one path"
osax.the_clipboard(:result_type => :file_url).path
end
puts path_from_clipboard
Il Finder è quello che è, e AppleScript è quello che è, è tutto troppo non riescono ad andare in giro. Quindi, che diavolo, ho saltato in Cocoa.
Uno di questi script restituirà l'elenco dei percorsi assoluti ciascuna su una nuova linea.
MacRuby:
#!/usr/bin/env macruby
# encoding: UTF-8
framework 'Cocoa'
puts NSPasteboard.generalPasteboard.pasteboardItems
.map { |pbi| pbi.stringForType('public.file-url') }.compact
.map { |url| NSURL.URLWithString(url).path }
Nu:
#!/usr/bin/env nush
(puts ((((((NSPasteboard generalPasteboard) pasteboardItems)
map: (do (pbi) (pbi stringForType: "public.file-url")))
select: (do (url) (url)))
map: (do (url) ((NSURL URLWithString: url) path))) componentsJoinedByString: "\n"))
Ero alla ricerca di una soluzione che copiare il percorso dei file selezionati nel Finder. Ecco quello che mi si avvicinò con:
set ASTID to AppleScript's text item delimiters --——>>
set AppleScript's text item delimiters to return
tell application "Finder" to set sel to the selection as text
set listPaths to {}
repeat with pth in paragraphs of sel
set end of listPaths to POSIX path of pth
end repeat
set listPathsClipboard to listPaths as text
set AppleScript's text item delimiters to ASTID --——<<
set the clipboard to listPathsClipboard