Есть ли способ автоматически «вернуть» все в корзину?

Жена увидела в Finder папку «все документы» и решила переместить все в корзину.

Теперь у нас более 9000 файлов в корзине, и я не смог найти способ вернуть все обратно одним щелчком мыши.

По какой-то причине это позволит мне «вернуть» только один файл за раз.

Есть ли способ автоматизировать это?

Если она перетащила папку в корзину, то просто вытащить обратно?

Ответы (9)

Если функция «Вернуть» отключена для выбора нескольких элементов, это означает, что (по крайней мере) один из выбранных элементов не имеет исходной информации о местоположении, хранящейся в файле .DS_Store папки «Корзина».

Хотя это далеко не идеально, попробуйте выбрать несколько подмножеств файлов в поисках групп, которые вы можете «Вернуть» в массовом порядке , прежде чем прибегать к ручной регистрации оставшихся файлов.

Кажется, я не могу "вернуть" файлы в массовом порядке. Я могу выбрать любой файл, и есть возможность вернуть его, но когда я выбираю оба файла, «Вернуть» недоступен. Таким образом, я не думаю, что вы можете «Вставить обратно» в массовом порядке. Хотя, может быть, с помощью applescript...
Этот ответ неверен. Я нахожусь в состоянии, когда любой отдельный файл может быть «Возвращен», но если я выберу более одного файла, я не смогу, что несовместимо с вашим ответом.
Ответ действительно неверный. У меня есть файл A и файл B в моей корзине. Выбор их по отдельности дает мне возможность вернуть их при нажатии правой кнопкой мыши. Выбрав их оба, а затем щелкнув правой кнопкой мыши, опция «Возвратить» исчезла.
Множественный выбор «Вернуть назад» работает у меня прямо сейчас на MacOS v10.15.4.

Попробуйте запустить такой скрипт в редакторе 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 раз быстрее. Я не исследовал, почему.

Этот код AppleScript работает для меня с последней версией macOS Mojave.

Этот код будет перебирать каждый элемент в корзине, возвращая каждый элемент на исходное место.

Если какая-либо из исходных папок файлов в Корзине больше не существует, repeat until trashCount is 0команда выйдет из цикла. Любые оставшиеся файлы в Корзине будут только теми файлами, которые не могут быть возвращены по этой причине.

ОБНОВИТЬ

Поскольку можно выбрать элемент на рабочем столе во время повторяющегося цикла процесса возврата файлов из корзины, выбранный элемент рабочего стола может застрять в процессе и быть перемещенным в корзину. Чтобы избежать этого сценария, я добавил код, который блокирует разблокированные в данный момент элементы рабочего стола, а также разблокирует их в конце сценария.

Поскольку все элементы рабочего стола теперь заблокированы... В процессе возврата файлов из корзины, если по какой-то причине вы случайно выберете файл или папку на рабочем столе и код попытается обработать этот выбранный элемент рабочего стола... создайте диалоговое окно с упоминанием того, что элемент заблокирован, и спросите, хотите ли вы продолжить отправку его в корзину. Блок сообщений System Events ближе к концу скрипта будет обрабатывать любое из этих диалоговых окон, которые могли быть сгенерированы.

property desktopFolder : path to desktop
property unlockedFiles : missing value

tell application "Finder" to set trashCount to count of every item of trash

tell application "Finder"
    set unlockedFilesRef to a reference to ¬
        (items of desktopFolder whose locked is false)
    set unlockedFiles to contents of unlockedFilesRef
    try
        set locked of unlockedFilesRef to true
    end try
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 0.3
try
    tell application "Finder" to close window "Trash"
end try
delay 0.3

tell application "System Events"
    repeat until not (exists of button "Stop" of scroll area 1 ¬
        of window 1 of application process "Finder")
        if exists of button "Stop" of scroll area 1 ¬
            of window 1 of application process "Finder" then
            click button "Stop" of scroll area 1 of window 1 ¬
                of application process "Finder"
        end if
    end repeat
end tell

tell application "Finder"
    close every Finder window
    delay 0.5
    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, которые открывают новое окно, показывающее возвращенный файл. Возможно, вам следует в качестве примечания по использованию сообщить пользователю, что для его использования нельзя прикасаться к компьютеру, пока он не будет завершен, из-за характера сценариев пользовательского интерфейса. Это не обязательно должно быть сообщение, представленное запуском скрипта, но как примечание в ответе.
Кстати, у меня было бы +1, но ошибка в цикле повторения неприемлема, потому что ее можно закодировать для обработки ситуации, которая ее вызывает!
@user3439894 user3439894 Я обновил код... Где мой +1? РЖУ НЕ МОГУ
Посмотрите, как это было легко! :) +1
Это сработало как волшебство, когда моя жена случайно удалила кучу файлов на своем Macbook (Sierra, 10.12.6). Спасибо за обновление, несмотря на возраст ОП!

У меня работал 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
Это сработало для меня на macOS Sierra. К вашему сведению: код клавиши 126 — вверх, а код клавиши 51 — назад. Вы можете изменить 3-строчную клавишу вниз ... клавишу вверх ... на одну: key code 51 using key command down. (Это адаптировано из другого ответа. Файлы, восстановленные на моем рабочем столе, требовали мой системный пароль, который испортил этот сценарий. Я отменил их и вручную восстановил те несколько.
Для меня в MacOS Mojave это решение было кошмаром. Каждый элемент, который был возвращен из корзины, открывал новое окно Finder в исходной папке этого элемента. Затем код начал выбирать элементы в текущем окне Finder (некоторые из которых были папками с прикрепленными действиями с папками), которые затем срабатывали.

вы должны иметь возможность выделять каждый файл или, по крайней мере, делать это поэтапно, копировать их, а затем повторно вставлять, я полагаю. Я только что попробовал, и если вы дважды щелкнете по корзине, а затем щелкните правой кнопкой мыши файлы, которые хотите восстановить, есть опция «вернуть», которая работает только файл за файлом, как я сказал, я выделю, а затем нажмите Cc (команда c), чтобы скопировать затем Cv (команда v), чтобы вставить их обратно.

Это сработало для меня:

  • Создайте новую папку в Finder, я назвал свои "восстановленные файлы"
  • Откройте папку «Корзина» и выберите группу файлов.
  • Скопируйте файлы и вставьте в папку «восстановленные файлы».

Если вам нужно вернуть большую папку или большое количество отдельных файлов, используйте эту технику. Если вам нужны только 1 или 2 файла, просто используйте функцию «вернуть».

Неправильно - это опять-таки фактически не "возвращает" файлы и не решает проблему, а просто берет их все и сбрасывает в одну большую кучу.

До Snow Leopard OS X изначально не имела возможности восстанавливать файлы в их исходные местоположения, из которых они были удалены (что можно сделать изначально в среде Windows с помощью параметра «Восстановить» в контекстном меню для корзины). Я случайно сделал то же самое, что и ваша жена в какой-то момент, когда было удалено около 10 000 файлов.

Изучив все варианты, я выполнил восстановление системы через Time Machine. Это был, безусловно, самый целесообразный способ разместить указанные файлы в нужных местах.

Что ж, как вы можете легко сделать из других ответов здесь, можно вернуть файлы / папки из корзины: откройте корзину, щелкните файл правой кнопкой мыши и выберите «Вернуть».

Перетащите все файлы из корзины на вкладку «Все мои файлы» в Finder. Это займет некоторое время, если у вас много файлов. Мы протестировали более 10000 файлов. Finder восстановит все файлы в исходное местоположение.

Это ничего не делает в macOS Sierra

Основываясь на близком решении, которое @thierry уже дал здесь от Джакомо Балли , мы создали это решение , чтобы помочь некоторым из вас, поскольку проблема все еще остается. Когда вы удаляете файл в MacOS , его исходное расположение сохраняется в.DsStoreскрытые файлы на случай, если вы захотите их восстановить. В последних версиях macOS есть возможность помещать содержимое в корзину обратно туда, откуда оно было получено, путем быстрого разделения, и это намного быстрее, чем перетаскивание. Итак, как вы знаете, если вы нажмете значок корзины в доке, вы увидите элементы, которые у вас есть, ну, в общем, в корзине. Щелкните правой кнопкой мыши или щелкните, удерживая клавишу Control, на любом файле (или удерживайте нажатой клавишу Command, чтобы щелкнуть и выбрать несколько элементов, затем щелкните, удерживая клавишу Control), и вы увидите параметр «Вернуть». Единственная проблема заключается в том, что это позволяет нам делать это только для одного элемента за раз.

Решение

  1. Начните с клонирования репозитория на свой локальный компьютер, чтобы вы могли начать использовать наше решение;

    git клон git@github.com:opprDev/trash-back.git

    компакт-диск мусор обратно

  2. Запустите AppleScript на этом компьютере с помощью команды osascript;

    скрипты osascript/trash-back.scpt

Выводы

Запуск AppleScript значительно расширяет возможности удаленных действий из командной строки и позволяет использовать множество крутых трюков, которые трудно реализовать другими способами. Хотя вы можете запускать целые сценарии в командной строке, этот способ запуска заключается только в том, что вы также можете войти на удаленный компьютер (используя ssh) и запустить AppleScript на этом компьютере с помощью osascriptкоманды. Команда osascriptтакже может запускать любой другой язык Open Scripting Architecture , используя модификатор -l.