Answers:
如果对多项选择禁用了“回退”,则表示(至少)所选项目之一没有其原始位置信息存储在垃圾箱目录的.DS_Store文件中。
虽然这是不太理想,尝试寻找群体的文件多选择的子集,你可以在“放回” 集体诉诸手册备案为剩余的文件之前。
尝试在AppleScript编辑器中运行这样的脚本:
repeat
tell application "Finder"
close windows
if items of trash is {} then return
open trash
activate
end tell
tell application "System Events"
key code 125 -- down arrow
key code 51 using command down -- command-delete
end tell
end repeat
如果在您尝试放回某些项目时Finder显示密码对话框,请尝试在代码tell application "System Events"
块的末尾添加以下内容:
delay 1
if exists window 1 of process "SecurityAgent" then
tell window 1 of process "SecurityAgent"
set value of text field 2 of scroll area 1 of group 1 to "pa55word"
click button 2 of group 2
end tell
end if
delay 1
可以将“将所有项放回垃圾箱”的AppleScript 为我工作:
打开“ AppleScript编辑器”并复制/粘贴下面的行,然后根据需要运行脚本多次。
tell application "System Events"
tell process "Finder"
repeat 100 times
tell application "Finder" to open trash
tell application "Finder" to activate
key code 126
key down command
key code 51
key up command
delay 0.2 -- adjust delay as needed
end repeat
end tell
end tell
tell application "Finder" to close every window
key code 51 using key command down
。(这是改编自另一个答案文件恢复到我的桌面希望我的系统密码,这个剧本我取消那些和手动搞砸恢复的那几个。
使用最新版本的macOS Mojave,此AppleScript代码对我有用。
此代码将遍历垃圾箱中的每个项目,将每个项目放回其原始位置。
如果“废纸rash”中文件的任何原始源文件夹都不存在,该repeat until trashCount is 0
命令将退出循环。由于这个原因,垃圾箱中的所有剩余文件将仅是无法退回的文件。
更新
由于可以在从垃圾箱中放回文件的过程的重复循环中选择桌面上的某个项目,因此所选桌面项目可能会陷入该过程中并被移到垃圾箱中。为了避免这种情况,我添加了代码,这些代码将锁定当前未锁定的桌面项目,并且还将在脚本末尾将其解锁。
因为所有桌面项目现在都已锁定...在从回收站放回文件的过程中,如果由于某种原因您不小心选择了桌面上的文件或文件夹,并且代码尝试处理该选定的桌面项目...它将生成一个对话框窗口,提示该项目已被锁定,并询问是否要继续将其发送到回收站。脚本结尾处的“系统事件”告诉块将处理可能已生成的任何对话框。
property desktopFolder : path to desktop
property unlockedFiles : missing value
tell application "Finder"
set trashCount to count of every item of trash
set unlockedFiles to (items of desktopFolder whose locked is false)
repeat with i in unlockedFiles
set locked of i to true
end repeat
end tell
repeat until trashCount is 0
tell application "Finder" to set orphanCount to count of every item of trash
putFilesBack()
tell application "Finder" to set trashCount to count of every item of trash
if orphanCount is equal to trashCount then exit repeat
end repeat
delay 1
tell application "System Events"
repeat until not (exists of button "Stop" of scroll area 1 of window 2 of application process "Finder")
if exists of button "Stop" of scroll area 1 of window 2 of application process "Finder" then
click button "Stop" of scroll area 1 of window 2 of application process "Finder"
end if
end repeat
end tell
tell application "Finder"
close every Finder window
delay 1
repeat with i in unlockedFiles
set locked of i to false
end repeat
end tell
on putFilesBack()
global trashFiles, trashCount, thisItem
tell application "Finder"
set trashFiles to every item of trash
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
my closeFinderWindows()
end tell
delay 0.1
tell application "System Events"
tell application process "Finder"
repeat with i from 1 to count of trashFiles
set thisItem to item i of trashFiles
delay 0.1
set frontmost to true
select thisItem
delay 0.1
try
key code 51 using {command down}
end try
delay 0.1
my closeFinderWindows()
delay 0.1
end repeat
end tell
end tell
tell application "Finder" to set trashCount to count of every item of trash
end putFilesBack
on closeFinderWindows()
tell application "Finder"
set finderWindowRef to (a reference to (every Finder window whose name is not "Trash"))
set finderWindowRef to contents of finderWindowRef
close (items of finderWindowRef)
end tell
end closeFinderWindows
这为我工作:
如果您需要放回一个大文件夹或大量单个文件,请使用此技术。如果仅需要1个或2个文件,则只需使用“回送”功能。
在Snow Leopard之前,OS X本身不具有将文件还原到其原始位置的功能(可以在Windows环境中,通过回收站上下文菜单中的“还原”选项在本地完成此操作)。我不小心做了和您妻子一样的事情,一时删除了大约10,000多个文件。
浏览完所有选项后,我通过Time Machine执行了系统还原。到目前为止,这是将上述文件放置在正确位置的最便捷方法。
将所有文件从“废纸rash”拖到Finder中的“所有我的文件”选项卡。如果您有很多文件,将需要一些时间。我们对10000多个文件进行了测试。Finder会将所有文件还原到其原始位置。
根据贾科莫·巴利(Giacomo Balli)在这里提供的@thierry的解决方案,我们创建了此解决方案以帮助你们中的一些人,因为问题仍然存在。当你删除MacOS的文件,它的原始位置被存储在.DsStore
隐藏的文件,以防您要还原它。最新版本的macOS能够将内容从原始位置放回垃圾箱中,零散分裂,并且比拖放更快。如您所知,如果您在Dock中单击垃圾桶图标,那么您将看到已被垃圾桶丢弃的物品。右键单击或按住Control键单击任何文件(或按住Command键单击并选择多个项目,然后按住Control键单击),您将看到“放回”选项。唯一的问题是,它一次只能让我们进行一项操作。
解
首先将存储库克隆到您的本地计算机,以便您可以开始使用我们的解决方案;
git clone git@github.com:opprDev / trash-back.git
cd垃圾回收
通过osascript命令在该计算机上运行AppleScript。
osascript脚本/trash-back.scpt
结论
运行AppleScript极大地增加了您可以从命令行远程执行的操作,并启用了很多很酷的技巧,而这些技巧很难做到。尽管您可以在命令行中运行整个脚本,但是这种运行方式仅是关于运行,也可以通过命令登录到远程计算机(使用ssh)并在该计算机上运行AppleScriptosascript
。该osascript
命令还可以使用-l修饰符运行任何其他Open Scripting Architecture语言。