有没有一种方法可以自动“放回”垃圾箱中的所有内容?


16

我的妻子在Finder中看到了“所有文档”文件夹,并决定将其全部移至垃圾箱。

现在,我们已经有9,000多个文件丢进了垃圾箱,而我却找不到一种可以一键退回所有内容的方法。

由于某种原因,它只会让我一次“放回”一个文件。

有什么办法可以自动化吗?


1
如果她将文件夹拖到垃圾箱中,然后将其拖回去?
henryaaron 2012年

Answers:


9

如果对多项选择禁用了“回退”,则表示(至少)所选项目之一没有其原始位置信息存储在垃圾箱目录的.DS_Store文件中。

虽然这是不太理想,尝试寻找群体的文件多选择的子集,你可以在“放回” 集体诉诸手册备案为剩余的文件之前。


1
我似乎无法大量“撤回”文件。我可以选择其中一个文件,也可以选择放回去,但是当我同时选择“放回”时,则不可用。因此,我认为您无法大规模“撤回”。也许有一个applescript ...
Steve Moser 2013年

6
这个答案是不正确的。我处于任何单个文件都可以“回退”的状态,但是如果我选择了多个文件,则不能,这与您的回答不一致。
Tom Swirly 2014年

答案确实是不正确的。我的垃圾桶里有A逃逸文件B。右击时,单独选择它们会给我提供回退选项,同时选择它们和右键单击,回退选项就消失了。
扳手

5

尝试在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

由于某种原因,这对我来说运行非常缓慢,而@ThierryKoblentz的运行速度快了50倍。我没有探索原因。
罗里

3

可以将“将所有项放回垃圾箱”的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

1
这在macOS Sierra上对我有用。仅供参考:键代码126向上,键代码51退格。您可以将3行键按下...键向上...修改为以下一行:key code 51 using key command down。(这是改编自另一个答案文件恢复到我的桌面希望我的系统密码,这个剧本我取消那些和手动搞砸恢复的那几个。
埃里克·胡

对于我在MacOS Mojave上来说,此解决方案是一场噩梦。从废纸put放回的每个项目,都会在该项目的源文件夹中打开一个新的Finder窗口。然后代码开始在当前Finder窗口中选择项目(其中一些是带有附加文件夹操作的文件夹),然后触发该项目。
wch1zpink

3

使用最新版本的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

OP已有7.5年的历史,因此尽管不再适用于OP的问题,但是拥有一个更新的自动化脚本来处理macOS发行版本会很高兴,该脚本会打开一个新窗口,显示放回文件。作为使用注意事项,您可能应该通知用户,要使用此功能,由于UI脚本的本质,一定不要触摸计算机,直到完成操作为止。不一定是脚本运行时显示的消息,而是答案中的注释。
user3439894

顺便说一句,我本来可以+1的,但是重复循环中的错误是不可接受的,因为可以对它进行编码以处理导致它的情况!
user3439894

@ user3439894我更新了代码...我的+1在哪里?大声笑
wch1zpink

1
看看那有多容易!:) +1
user3439894

1

您应该能够突出显示每个文件,或者至少以增量批处理的方式进行复制,复制然后重新粘贴(我相信这些文件)。我刚刚尝试过,如果您双击垃圾桶,然后右键单击要还原的文件,则有一个“放回”选项,该选项仅逐个文件起作用,如我要突出显示然后按Cc(命令c)进行复制然后Cv(command v)将其粘贴回去。


1

这为我工作:

  • 在Finder中创建一个新文件夹,我将其称为“已恢复文件”
  • 打开垃圾箱文件夹并选择一组文件
  • 复制文件并粘贴到“恢复的文件”文件夹中。

如果您需要放回一个大文件夹或大量单个文件,请使用此技术。如果仅需要1个或2个文件,则只需使用“回送”功能。


1
错误-这实际上并没有“放回”文件并不能解决问题,它只是将它们全部拿走并扔了一大堆。
Tom Swirly 2014年

1

在Snow Leopard之前,OS X本身不具有将文件还原到其原始位置的功能(可以在Windows环境中,通过回收站上下文菜单中的“还原”选项在本地完成此操作)。我不小心做了和您妻子一样的事情,一时删除了大约10,000多个文件。

浏览完所有选项后,我通过Time Machine执行了系统还原。到目前为止,这是将上述文件放置在正确位置的最便捷方法。


2
好了,因为您可以在这里轻松地从其他答案中得出结论,所以可以从“废纸rash”放回文件/文件夹:打开“废纸rash”,右键单击文件,然后选择“放回”。
nohillside

1

将所有文件从“废纸rash”拖到Finder中的“所有我的文件”选项卡。如果您有很多文件,将需要一些时间。我们对10000多个文件进行了测试。Finder会将所有文件还原到其原始位置。


2
这在macOS Sierra上无济于事
Cyril Duchon-Doris

0

根据贾科莫·巴利Giacomo Balli)在这里提供的@thierry的解决方案,我们创建了此解决方案以帮助你们中的一些人,因为问题仍然存在。当你删除MacOS的文件,它的原始位置被存储.DsStore隐藏的文件,以防您要还原它。最新版本的macOS能够将内容从原始位置放回垃圾箱中,零散分裂,并且比拖放更快。如您所知,如果您在Dock中单击垃圾桶图标,那么您将看到已被垃圾桶丢弃的物品。右键单击或按住Control键单击任何文件(或按住Command键单击并选择多个项目,然后按住Control键单击),您将看到“放回”选项。唯一的问题是,它一次只能让我们进行一项操作。

  1. 首先将存储库克隆到您的本地计算机,以便您可以开始使用我们的解决方案;

    git clone git@github.com:opprDev / trash-back.git

    cd垃圾回收

  2. 通过osascript命令在该计算机上运行AppleScript

    osascript脚本/trash-back.scpt

结论

运行AppleScript极大地增加了您可以从命令行远程执行的操作,并启用了很多很酷的技巧,而这些技巧很难做到。尽管您可以在命令行中运行整个脚本,但是这种运行方式仅是关于运行,也可以通过命令登录到远程计算机(使用ssh)并在该计算机上运行AppleScriptosascript。该osascript命令还可以使用-l修饰符运行任何其他Open Scripting Architecture语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.