shell: 检索Finder复制的文件路径
shell: Retrieve the path of files copied by Finder
我想在我的 zsh 脚本中获取 Finder 复制的文件路径。我不介意调用外部 utility/script.
我试过了pbpaste
,它只是returns其中一个复制文件的基本名称。
PS: 在 Finder 中使用 cmd+c 手动复制文件。
没有看到您有关复制的 Finder 项目的代码,很难为您提供准确的解决方案。这是一种可能的解决方案。以下 AppleScript 代码将获取当前选定的查找器项目,并将剪贴板设置为这些选定查找器项目的完整文件路径,作为列表。
tell application "Finder" to set selectedFiles to selection as alias list
if selectedFiles is {} then return
set filePaths to {}
repeat with thisFile in selectedFiles
set end of filePaths to POSIX path of thisFile
end repeat
set text item delimiters to linefeed
set the clipboard to (filePaths as text)
或
由于您的过程是使用键盘快捷键 cmd + c 将选定的查找器文件复制到剪贴板,因此您可以在 Automator.app 中使用以下 AppleScript 代码并将其保存为服务。在系统 Preferences.app 中,您可以为新服务分配键盘快捷键。
在使用键盘快捷键 cmd + c 复制您的 Finder 项目之前,您需要 运行 您刚刚创建的服务来存储文件路径,以便您以后可以检索它们。
简而言之,此 AppleScript 代码将显示一个对话框,为您提供两个选项。
1) 将当前选中的finder文件的文件路径写入一个临时文本文件(需要的时候可以调取)
2) 通过从临时文件中检索信息将剪贴板设置为文件路径
tell application "Finder" to set selectedFiles to selection as alias list
if selectedFiles is {} then return
set filePaths to {}
repeat with thisFile in selectedFiles
set end of filePaths to POSIX path of thisFile
end repeat
set text item delimiters to linefeed
set filePaths to (filePaths as text)
set readOrWrite to {"Write Selected Files' File Path To Temp", "Set Clipboard To The File Paths"}
activate
set theChoice to (choose from list readOrWrite ¬
with title "CHOOSE YOUR OPTION PLEASE" with prompt ¬
"Write File Paths Or Set Clipboard To File Paths?" default items 1 ¬
OK button name "DO IT" cancel button name "Cancel") as string
if theChoice is "Write Selected Files' File Path To Temp" then
writeToFile(filePaths)
else if theChoice is "Set Clipboard To The File Paths" then
readFile()
else
return
end if
on writeToFile(filePaths)
set theFile to "/tmp/File_Paths.txt"
set theText to filePaths
try
set writeToFile to open for access theFile with write permission
set eof writeToFile to 0
write theText & linefeed to writeToFile as text starting at eof
close access theFile
on error errMsg number errNum
close access theFile
set writeToFile to open for access theFile with write permission
set eof writeToFile to 0
write theText & linefeed to writeToFile as text starting at eof
close access theFile
end try
end writeToFile
on readFile()
set theFile to "/tmp/File_Paths.txt"
set the clipboard to (read theFile)
end readFile
存储文件路径信息后,您将使用快捷方式cmd + c 复制您的finder 项目,对复制的finder 文件做任何您想做的事情。
然后返回并再次运行服务将文件路径复制到剪贴板
您可以使用 ⌘⌥[将完整文件路径复制到 Finder 中的剪贴板=28=]C.
但是,还有其他情况需要从剪贴板中检索文件。下面的 AppleScript 片段将使用 ⌘C 在 Finder[=33= 中检索最后复制到剪贴板的文件集].最初,它会检索文件对象本身,这些对象可以在 AppleScript 中以各种方式使用。但是,脚本的后半部分将文件对象转换为 posix 文件路径的简单列表,然后将其连接成由换行符分隔的字符串。
use framework "AppKit"
property this : a reference to current application
property NSPasteboard : a reference to NSPasteboard of this
property NSURL : a reference to NSURL of this
property text item delimiters : linefeed
set pb to NSPasteboard's generalPasteboard()
set fs to (pb's readObjectsForClasses:[NSURL] options:[]) as list
repeat with f in fs
set f's contents to POSIX path of f
end repeat
fs as text
要在 zsh
中实现这一点,您可以像这样使用 osascript
:
osascript -e "use framework \"AppKit\"
property this : a reference to current application
property NSPasteboard ..."
或者您可以使用 Script Editor 将 AppleScript 另存为文件,扩展名为 .scpt
(编译代码)或 .applescript
(文本),然后运行 从命令行像这样:
osascript /path/to/file.applescript
我想在我的 zsh 脚本中获取 Finder 复制的文件路径。我不介意调用外部 utility/script.
我试过了pbpaste
,它只是returns其中一个复制文件的基本名称。
PS: 在 Finder 中使用 cmd+c 手动复制文件。
没有看到您有关复制的 Finder 项目的代码,很难为您提供准确的解决方案。这是一种可能的解决方案。以下 AppleScript 代码将获取当前选定的查找器项目,并将剪贴板设置为这些选定查找器项目的完整文件路径,作为列表。
tell application "Finder" to set selectedFiles to selection as alias list
if selectedFiles is {} then return
set filePaths to {}
repeat with thisFile in selectedFiles
set end of filePaths to POSIX path of thisFile
end repeat
set text item delimiters to linefeed
set the clipboard to (filePaths as text)
或
由于您的过程是使用键盘快捷键 cmd + c 将选定的查找器文件复制到剪贴板,因此您可以在 Automator.app 中使用以下 AppleScript 代码并将其保存为服务。在系统 Preferences.app 中,您可以为新服务分配键盘快捷键。
在使用键盘快捷键 cmd + c 复制您的 Finder 项目之前,您需要 运行 您刚刚创建的服务来存储文件路径,以便您以后可以检索它们。
简而言之,此 AppleScript 代码将显示一个对话框,为您提供两个选项。
1) 将当前选中的finder文件的文件路径写入一个临时文本文件(需要的时候可以调取)
2) 通过从临时文件中检索信息将剪贴板设置为文件路径
tell application "Finder" to set selectedFiles to selection as alias list
if selectedFiles is {} then return
set filePaths to {}
repeat with thisFile in selectedFiles
set end of filePaths to POSIX path of thisFile
end repeat
set text item delimiters to linefeed
set filePaths to (filePaths as text)
set readOrWrite to {"Write Selected Files' File Path To Temp", "Set Clipboard To The File Paths"}
activate
set theChoice to (choose from list readOrWrite ¬
with title "CHOOSE YOUR OPTION PLEASE" with prompt ¬
"Write File Paths Or Set Clipboard To File Paths?" default items 1 ¬
OK button name "DO IT" cancel button name "Cancel") as string
if theChoice is "Write Selected Files' File Path To Temp" then
writeToFile(filePaths)
else if theChoice is "Set Clipboard To The File Paths" then
readFile()
else
return
end if
on writeToFile(filePaths)
set theFile to "/tmp/File_Paths.txt"
set theText to filePaths
try
set writeToFile to open for access theFile with write permission
set eof writeToFile to 0
write theText & linefeed to writeToFile as text starting at eof
close access theFile
on error errMsg number errNum
close access theFile
set writeToFile to open for access theFile with write permission
set eof writeToFile to 0
write theText & linefeed to writeToFile as text starting at eof
close access theFile
end try
end writeToFile
on readFile()
set theFile to "/tmp/File_Paths.txt"
set the clipboard to (read theFile)
end readFile
存储文件路径信息后,您将使用快捷方式cmd + c 复制您的finder 项目,对复制的finder 文件做任何您想做的事情。
然后返回并再次运行服务将文件路径复制到剪贴板
您可以使用 ⌘⌥[将完整文件路径复制到 Finder 中的剪贴板=28=]C.
但是,还有其他情况需要从剪贴板中检索文件。下面的 AppleScript 片段将使用 ⌘C 在 Finder[=33= 中检索最后复制到剪贴板的文件集].最初,它会检索文件对象本身,这些对象可以在 AppleScript 中以各种方式使用。但是,脚本的后半部分将文件对象转换为 posix 文件路径的简单列表,然后将其连接成由换行符分隔的字符串。
use framework "AppKit"
property this : a reference to current application
property NSPasteboard : a reference to NSPasteboard of this
property NSURL : a reference to NSURL of this
property text item delimiters : linefeed
set pb to NSPasteboard's generalPasteboard()
set fs to (pb's readObjectsForClasses:[NSURL] options:[]) as list
repeat with f in fs
set f's contents to POSIX path of f
end repeat
fs as text
要在 zsh
中实现这一点,您可以像这样使用 osascript
:
osascript -e "use framework \"AppKit\"
property this : a reference to current application
property NSPasteboard ..."
或者您可以使用 Script Editor 将 AppleScript 另存为文件,扩展名为 .scpt
(编译代码)或 .applescript
(文本),然后运行 从命令行像这样:
osascript /path/to/file.applescript