Czy istnieje sposób na automatyczne „odłożenie” wszystkiego w Koszu?

16

Moja żona zobaczyła folder „wszystkie dokumenty” w Finderze i postanowiła przenieść wszystko do kosza.

Teraz mamy ponad 9 000 plików w koszu i nie byłem w stanie znaleźć sposobu na odłożenie wszystkiego jednym kliknięciem.

Z jakiegoś powodu pozwoli mi tylko „odłożyć” jeden plik na raz.

Czy jest jakiś sposób na zautomatyzowanie tego?

nowicjuszPrgrmr
źródło
1
Jeśli przeciągnęła folder do kosza, to po prostu przeciągnął go z powrotem?
henryaaron

Odpowiedzi:

9

Jeśli „Odłóż” jest wyłączone dla wyboru wielu elementów, oznacza to, że (przynajmniej) jeden z wybranych elementów nie ma oryginalnej informacji o lokalizacji zapisanej w pliku .DS_Store katalogu Trash.

Chociaż nie jest to idealne, spróbuj wybrać wiele podzbiorów plików w poszukiwaniu grup, które możesz „odłożyć” masowo, zanim skorzystasz z ręcznego archiwizowania pozostałych plików.

jaberg
źródło
1
Nie mogę masowo „odłożyć” plików. Mogę wybrać dowolny plik, a opcja odłożenia jest dostępna, ale gdy wybieram oba, „Odłóż” nie jest dostępne. Dlatego nie sądzę, abyś mógł masowo „odłożyć”. Może z jabłkiem ...
Steve Moser
6
Ta odpowiedź jest niepoprawna. Jestem w stanie, w którym każdy pojedynczy plik może być „Odłóż”, ale jeśli wybiorę więcej niż jeden plik, nie mogę, co jest niezgodne z twoją odpowiedzią.
Tom Swirly,
Odpowiedź jest rzeczywiście nieprawidłowa. Mam plik A i plik B w koszu. Zaznaczenie ich indywidualnie daje mi opcję odłożenia przy prawym kliknięciu, wybranie ich obu, a następnie kliknięcie prawym przyciskiem myszy, opcja Odłóż zniknęła.
Klucz
5

Spróbuj uruchomić taki skrypt w edytorze 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

Jeśli Finder wyświetla okno dialogowe hasła, gdy próbujesz odłożyć jakiś element, spróbuj dodać coś takiego na końcu tell application "System Events"bloku:

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
źródło
Z jakiegoś powodu działało to dla mnie bardzo wolno, podczas gdy ten autorstwa @ThierryKoblentz był około 50 razy szybszy. Nie odkryłem dlaczego.
Rory
3

AppleScript, który „odkłada [s] z powrotem wszystkie elementy do Kosza” działał dla mnie:

Otwórz „AppleScript Editor” i skopiuj / wklej poniższe wiersze, a następnie uruchom skrypt tyle razy, ile potrzeba.

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
Thierry Koblentz
źródło
1
To działało dla mnie na macOS Sierra. FYI: kod klucza 126 jest włączony, a kod klucza 51 to backspace. Można modyfikować 3 linie nawigacji w dół ... w góre ... do jednego: key code 51 using key command down. (Jest to dostosowane z innej odpowiedzi. Pliki przywrócone na mój pulpit wymagały mojego hasła systemowego, które pomieszało się z tym skryptem. Anulowałem je i ręcznie przywróciłem kilka z nich.
Eric Hu
Dla mnie na MacOS Mojave to rozwiązanie było koszmarem. Każdy element, który został usunięty z kosza, otworzył nowe okno Findera do folderu źródłowego tego elementu. Następnie kod zaczął wybierać elementy w bieżącym oknie Findera (niektóre z nich były folderami z dołączonymi akcjami folderów), które następnie zostały uruchomione.
wch1zpink
3

Ten kod AppleScript działa dla mnie przy użyciu najnowszej wersji systemu macOS Mojave.

Ten kod będzie przechodził przez każdy element w koszu, przywracając każdy element do pierwotnej lokalizacji.

Jeśli którykolwiek z oryginalnych folderów źródłowych plików w Koszu już nie istnieje, repeat until trashCount is 0polecenie opuści pętlę. Wszelkie pozostałe pliki w Koszu będą tylko plikami, których nie można przywrócić z tego powodu.

AKTUALIZACJA

Ponieważ możliwe jest wybranie elementu na pulpicie podczas powtarzania pętli procesu przywracania plików z kosza, wybrany element pulpitu może zostać złapany w tym procesie i przeniesiony do kosza. Aby uniknąć tego scenariusza, dodałem kod, który zablokuje aktualnie odblokowane elementy pulpitu, a także odblokuje je na końcu skryptu.

Ponieważ wszystkie elementy pulpitu są teraz zablokowane ... Podczas procesu przywracania plików z kosza, jeśli z jakiegoś powodu przypadkowo wybierzesz plik lub folder na pulpicie, a kod spróbuje przetworzyć wybrany element pulpitu ... wygeneruj okno dialogowe informujące, że element jest zablokowany i zapytaj, czy chcesz kontynuować wysyłanie go do kosza. Zdarzenia systemowe informujące, że blok pod koniec skryptu obsłuży każde z okien dialogowych, które mogły zostać wygenerowane.

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
źródło
OP ma około 7,5 roku, więc chociaż nie ma już zastosowania do problemu OP, miło jest mieć zaktualizowany automatyczny skrypt, który obsługuje wydania systemu macOS, które otwierają nowe okno pokazujące plik odłożenia. Prawdopodobnie powinieneś poinformować użytkownika, że ​​aby z niego skorzystać, nie wolno dotykać komputera, dopóki nie zostanie ukończony ze względu na charakter skryptów interfejsu użytkownika. Niekoniecznie musi to być komunikat przedstawiany przez uruchomienie skryptu, ale jako notatka w odpowiedzi.
user3439894
BTW, miałbym +1, ale błąd w pętli powtarzania jest niedopuszczalny, ponieważ można go zakodować, by poradził sobie z sytuacją, która go powoduje!
user3439894
@ user3439894 Zaktualizowałem kod ... Gdzie jest moja +1? LOL
wch1zpink
1
Widzisz jakie to było proste! :) +1
użytkownik3439894
1

powinieneś być w stanie podświetlić każdy plik lub przynajmniej zrobić to w przyrostowych partiach, skopiować je, a następnie ponownie wkleić, jak sądzę. Właśnie go wypróbowałem, a jeśli klikniesz dwukrotnie kosz, a następnie klikniesz prawym przyciskiem myszy pliki, które chcesz przywrócić, istnieje opcja „odłóż”, która działa tylko plik po pliku, jak powiedziałem, że zaznaczę, a następnie naciśnij Cc (polecenie c), aby skopiować następnie Cv (polecenie v), aby wkleić je z powrotem.

Gmenfan83
źródło
1

To działało dla mnie:

  • Utwórz nowy folder w Finderze, nazwałem mój „odzyskanymi plikami”
  • Otwórz folder Kosz i wybierz grupę plików
  • Skopiuj pliki i wklej do folderu „odzyskane pliki”.

Jeśli chcesz odłożyć duży folder lub dużą liczbę pojedynczych plików, skorzystaj z tej techniki. Jeśli potrzebujesz tylko 1 lub 2 plików, po prostu użyj funkcji „odłóż”.

Marcy Freeman
źródło
1
Źle - to znowu nie „odkłada” plików i nie rozwiązuje problemu, po prostu bierze je wszystkie i wrzuca w jeden wielki stos.
Tom Swirly,
1

Przed systemem Snow Leopard system OS X nie ma możliwości przywracania plików do ich oryginalnych lokalizacji, z których zostały usunięte (jak można to zrobić natywnie w środowisku Windows z opcją „Przywróć” w menu kontekstowym Kosza). Przypadkowo zrobiłem to samo, co twoja żona w pewnym momencie, a około 10 000 plików zostało usuniętych.

Po zapoznaniu się ze wszystkimi moimi opcjami przeprowadziłem przywracanie systemu za pomocą Time Machine. Była to zdecydowanie najbardziej celowa metoda na przeniesienie wspomnianych plików do odpowiednich lokalizacji.

Mort
źródło
2
Cóż, jak można łatwo wywnioskować z innych odpowiedzi tutaj, możliwe jest przywrócenie plików / folderów z Kosza: otwórz Kosz, kliknij plik prawym przyciskiem myszy i wybierz „Odłóż”.
nohillside
1

Przeciągnij wszystkie pliki z Kosza na kartę Wszystkie moje pliki w Finderze. Zajmie to trochę czasu, jeśli masz dużo plików. Przetestowaliśmy na ponad 10000 plików. Finder przywróci wszystkie pliki do pierwotnej lokalizacji.

Jacob Cereteli
źródło
2
To nic nie robi w systemie macOS Sierra
Cyril Duchon-Doris,
0

Opierając się na prawie rozwiązaniu, które @ thierry już tutaj podał od Giacomo Balli , stworzyliśmy to rozwiązanie, aby pomóc kilku z was, ponieważ problem nadal występuje. Po usunięciu pliku w systemie MacOS jego oryginalne lokalizacje są przechowywane w folderze.DsStoreukryte pliki na wypadek, gdybyś chciał je przywrócić. Najnowsze wersje systemu macOS mają możliwość umieszczania elementów w Koszu z powrotem, skąd pochodzą, dzielenia na części i jest znacznie szybsze niż przeciąganie i upuszczanie. Jak więc wiesz, jeśli klikniesz ikonę kosza w Docku, zobaczysz przedmioty, które masz, cóż, zniszczone. Kliknij dowolny plik prawym przyciskiem myszy lub kliknij z wciśniętym klawiszem Control (lub przytrzymaj klawisz Command, aby kliknąć i wybrać wiele elementów, a następnie kliknij z wciśniętym klawiszem Control), a zobaczysz opcję Odłóż. Jedynym problemem jest to, że pozwala nam to robić tylko dla jednego przedmiotu na raz.

Rozwiązanie

  1. Zacznij od klonowania repozytorium na maszynie lokalnej, abyś mógł zacząć korzystać z naszego rozwiązania;

    git clone [email protected]: opprDev / trash-back.git

    cd-back-back

  2. Uruchom AppleScript na tym komputerze za pomocą polecenia osascript;

    skrypty osascript / trash-back.scpt

Wnioski

Uruchamianie AppleScript znacznie zwiększa to, co możesz zrobić zdalnie z wiersza poleceń, i umożliwia wiele fajnych sztuczek, które trudno zrobić inaczej. Chociaż możesz uruchamiać całe skrypty w wierszu polecenia, ten sposób uruchamiania polega tylko na uruchomieniu, można również zalogować się na komputerze zdalnym (za pomocą ssh) i uruchomić AppleScript na tym komputerze za pomocą osascriptpolecenia. osascriptPolecenia można również uruchomić dowolną inną Otwarte Scripting Architecture język przy użyciu -l modyfikatora.

Francisco Maria Calisto
źródło