Жена увидела в Finder папку «все документы» и решила переместить все в корзину.
Теперь у нас более 9000 файлов в корзине, и я не смог найти способ вернуть все обратно одним щелчком мыши.
По какой-то причине это позволит мне «вернуть» только один файл за раз.
Есть ли способ автоматизировать это?
Если функция «Вернуть» отключена для выбора нескольких элементов, это означает, что (по крайней мере) один из выбранных элементов не имеет исходной информации о местоположении, хранящейся в файле .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 работает для меня с последней версией 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
У меня работал 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
. (Это адаптировано из другого ответа. Файлы, восстановленные на моем рабочем столе, требовали мой системный пароль, который испортил этот сценарий. Я отменил их и вручную восстановил те несколько.вы должны иметь возможность выделять каждый файл или, по крайней мере, делать это поэтапно, копировать их, а затем повторно вставлять, я полагаю. Я только что попробовал, и если вы дважды щелкнете по корзине, а затем щелкните правой кнопкой мыши файлы, которые хотите восстановить, есть опция «вернуть», которая работает только файл за файлом, как я сказал, я выделю, а затем нажмите Cc (команда c), чтобы скопировать затем Cv (команда v), чтобы вставить их обратно.
Это сработало для меня:
Если вам нужно вернуть большую папку или большое количество отдельных файлов, используйте эту технику. Если вам нужны только 1 или 2 файла, просто используйте функцию «вернуть».
До Snow Leopard OS X изначально не имела возможности восстанавливать файлы в их исходные местоположения, из которых они были удалены (что можно сделать изначально в среде Windows с помощью параметра «Восстановить» в контекстном меню для корзины). Я случайно сделал то же самое, что и ваша жена в какой-то момент, когда было удалено около 10 000 файлов.
Изучив все варианты, я выполнил восстановление системы через Time Machine. Это был, безусловно, самый целесообразный способ разместить указанные файлы в нужных местах.
Перетащите все файлы из корзины на вкладку «Все мои файлы» в Finder. Это займет некоторое время, если у вас много файлов. Мы протестировали более 10000 файлов. Finder восстановит все файлы в исходное местоположение.
Основываясь на близком решении, которое @thierry уже дал здесь от Джакомо Балли , мы создали это решение , чтобы помочь некоторым из вас, поскольку проблема все еще остается. Когда вы удаляете файл в MacOS , его исходное расположение сохраняется в.DsStore
скрытые файлы на случай, если вы захотите их восстановить. В последних версиях macOS есть возможность помещать содержимое в корзину обратно туда, откуда оно было получено, путем быстрого разделения, и это намного быстрее, чем перетаскивание. Итак, как вы знаете, если вы нажмете значок корзины в доке, вы увидите элементы, которые у вас есть, ну, в общем, в корзине. Щелкните правой кнопкой мыши или щелкните, удерживая клавишу Control, на любом файле (или удерживайте нажатой клавишу Command, чтобы щелкнуть и выбрать несколько элементов, затем щелкните, удерживая клавишу Control), и вы увидите параметр «Вернуть». Единственная проблема заключается в том, что это позволяет нам делать это только для одного элемента за раз.
Решение
Начните с клонирования репозитория на свой локальный компьютер, чтобы вы могли начать использовать наше решение;
git клон git@github.com:opprDev/trash-back.git
компакт-диск мусор обратно
Запустите AppleScript на этом компьютере с помощью команды osascript;
скрипты osascript/trash-back.scpt
Выводы
Запуск AppleScript значительно расширяет возможности удаленных действий из командной строки и позволяет использовать множество крутых трюков, которые трудно реализовать другими способами. Хотя вы можете запускать целые сценарии в командной строке, этот способ запуска заключается только в том, что вы также можете войти на удаленный компьютер (используя ssh) и запустить AppleScript на этом компьютере с помощью osascript
команды. Команда osascript
также может запускать любой другой язык Open Scripting Architecture , используя модификатор -l.
Хенриаарон