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

16

Моя жена увидела папку «все документы» в Finder и решила перенести все это в корзину.

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

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

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

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

Ответы:

9

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

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

Яберг
источник
1
Я не могу "положить обратно" файлы в массовом порядке. Я могу выбрать любой файл, и вариант для возврата есть, но когда я выбираю оба, «Вернуть назад» не доступен. Таким образом, я не думаю, что вы можете «положить обратно» в массовом порядке. Может быть, с яблочным сценарием, хотя ...
Стив Мозер
6
Этот ответ неверен. Я нахожусь в состоянии, когда любой отдельный файл может быть «Отложен», но если я выберу более одного файла, я не смогу, что не соответствует вашему ответу.
Том Свирли
Ответ действительно неверный. Я бросил А и подал в мой мусор. Выбирая их по отдельности, я получаю опцию возврата при правильном клике, выбирая их обоих, а затем щелкая правой кнопкой мыши, опция «Возврат» исчезает.
гаечный ключ
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
LRI
источник
По некоторым причинам это происходило очень медленно для меня, в то время как один @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 это решение стало кошмаром. Каждый элемент, который был возвращен из корзины, открывал новое окно Finder в исходной папке этого элемента. Затем код начал выбирать элементы в текущем окне Finder (некоторые из которых были папками с действиями с вложенными папками), которые затем запускались.
wch1zpink
3

Этот код AppleScript работает для меня, используя последнюю версию macOS Mojave.

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

Если какая-либо из исходных папок файлов в Корзине больше не существует, 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
wch1zpink
источник
ОП ~ 7,5 лет, поэтому, хотя он больше не применим к проблеме ОП, тем не менее, приятно иметь обновленный автоматизированный скрипт, который обрабатывает выпуски macOS, открывающие новое окно, показывающее файл возврата. Вы, вероятно, должны в качестве примечания по использованию проинформировать пользователя о том, что для его использования не следует прикасаться к компьютеру до его завершения из-за характера сценариев пользовательского интерфейса. Это не обязательно должно быть сообщение, представленное в результате выполнения сценария, но как примечание в ответе.
user3439894
Кстати, у меня было бы +1, но ошибка в цикле повторения недопустима, потому что она может быть закодирована для обработки ситуации, которая ее вызывает!
user3439894
@ user3439894 Я обновил код ... Где мой +1? LOL
wch1zpink
1
Посмотрите, как легко это было! :) +1
user3439894
1

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

Gmenfan83
источник
1

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

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

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

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

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

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

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

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

Якоб Черетели
источник
2
Это ничего не делает в macOS Сьерра
Кирилл Дюшон-Дорис
0

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

Решение

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

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

    cd trash-back

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

    osascript scripts / trash-back.scpt

Выводы

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

Франсиско Мария Калисто
источник