Чи є спосіб автоматично "повернути" все в кошик?


16

Моя дружина побачила папку «всі документи» у Finder і вирішила перенести це все на смітник.

Зараз у нас у кошику понад 9000 файлів, і я не зміг знайти спосіб повернути все одним кліком.

Чомусь це дозволить мені "повернути" один файл за один раз.

Чи є спосіб автоматизувати це?


1
Якщо вона перетягнула папку у смітник, то просто перетягніть її назад?
henryaaron

Відповіді:


9

Якщо "Повернути назад" вимкнено для вибору декількох елементів, це означає, що (принаймні) один із вибраних елементів не має оригінальної інформації про місцезнаходження, що зберігається у файлі .DS_Store каталогу каталогу.

Хоча це і є менш ідеально, спробуйте вибирати підмножини файлів, які шукають групи, які ви можете "Повернути" масово, перш ніж вдаватися до ручної подачі решти файлів.


1
Я, здається, не можу масово "повертати" файли. Я можу вибрати будь-який файл, і можливість повернути його є, але коли я вибираю обидва, "Повернути назад" недоступний. Тому я не думаю, що ви зможете масово "повернути". Можливо, з яблучним сценарієм, хоча ...
Стів Мозер

6
Ця відповідь невірна. Я перебуваю у стані, коли будь-який окремий файл може бути "Повернутись назад", але якщо я виділяю більше одного файлу, я не можу, що не відповідає вашій відповіді.
Tom Swirly

Відповідь дійсно неправильна. Я перелетів "А" та файл "Б" у своєму смітнику. Selectin them individual дає мені можливість повернути назад, коли клацніть правою кнопкою миші.
Гайковий ключ

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. FYI: код ключа 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

ОП - ~ 7,5 років, тому, хоча він більше не застосовується до випуску ОП, тим не менше, приємно мати оновлений автоматизований сценарій, який обробляє випуски macOS, що відкриває нове вікно із відображенням файлу, що повертається назад. Напевно, вам слід, як відомість використання, повідомити користувача, що для використання цього не слід торкатися комп'ютера до його завершення через характер сценарію користувальницького інтерфейсу. Це не обов'язково повинно бути повідомленням, представленим запуском сценарію, але як примітка у відповіді.
користувач3439894

До речі, у мене було б +1, але помилка в циклі повтору неприйнятна, оскільки її можна кодувати для обробки ситуації, яка її викликає!
користувач3439894

@ user3439894 Я оновив код ... Де мій +1? LOL
wch1zpink

1
Подивіться, як це було просто! :) +1
користувач3439894

1

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


1

Це працювало для мене:

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

Якщо вам потрібно повернути велику папку або велику кількість окремих файлів, скористайтеся цією методикою. Якщо вам потрібні лише 1 або 2 файли, просто скористайтеся функцією "поставити назад".


1
Неправильно - це знову ж таки фактично не "повертає" файли і не вирішує питання, воно просто забирає їх усіх і кидає в одну велику купу.
Tom Swirly

1

До Snow Leopard, OS X не має можливості відновлювати файли до їх початкових місць, з яких вони були видалені (як це можна зробити в домашніх умовах у середовищі Windows за допомогою параметра "Відновити" у контекстному меню Recycle Bin). Я випадково зробив те саме, що і ваша дружина в один момент, коли було видалено близько 10 000 плюс файли.

Вивчивши всі мої варіанти, я здійснив відновлення системи за допомогою Time Machine. Це, безумовно, найдоцільніший спосіб дістати вказані файли до їх належного місця.


2
Ну, як ви можете легко зробити висновки з інших відповідей тут, можна повернути назад файли / папки з кошика: відкрийте кошик, клацніть файл правою кнопкою миші та виберіть "Повернути назад".
nohillside

1

Перетягніть усі файли зі сміття на вкладку Усі мої файли в Finder. Мине час, якщо у вас багато файлів. Ми протестували на 10000+ файлах. Finder відновить усі файли до початкового місця.


2
Це не робить нічого на macOS Сьєрра
Кирило Дюшон-Доріс

0

Спираючись на близьке рішення, яке @thierry вже дав тут від Джакомо Баллі , ми створили це рішення, щоб допомогти кільком з вас, оскільки проблема все ще залишається. Коли ви видаляєте файл у MacOS , його вихідні місця зберігаються у.DsStoreприховані файли, якщо ви хочете відновити їх. Останні версії macOS мають можливість поміщати речі у свій кошик туди, звідки він прийшов, розбиваючись на лиця, і це набагато швидше, ніж перетягування та відкидання. Отже, як ви знаєте, якщо натиснути на піктограму сміття у вашому Доку, ви побачите, що у вас є, добре, випали. Клацніть правою кнопкою миші або клацніть клавішею Control на будь-якому файлі (або утримуйте команду, щоб натиснути та вибрати кілька елементів, потім клацніть Control), і ви побачите опцію "Повернути назад". Єдина проблема полягає в тому, що вона дозволяє нам робити це лише за один предмет.

Рішення

  1. Почніть з клонування сховища до вашої локальної машини, щоб ви могли почати використовувати наше рішення;

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

    cd trash-back

  2. Запустити AppleScript на цьому комп’ютері за допомогою команди osascript;

    osascript script / trash-back.scpt

Висновки

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.