C'è un modo per "rimettere" automaticamente tutto nel Cestino?


16

Mia moglie ha visto la cartella "tutti i documenti" nel Finder e ha deciso di spostarlo nel cestino.

Ora abbiamo oltre 9.000 file nel cestino e non sono stato in grado di trovare un modo per rimettere tutto con un clic.

Per qualche ragione mi lascerà 'rimettere' solo un file alla volta.

C'è un modo per automatizzare questo?


1
Se ha trascinato la cartella nel cestino, è sufficiente trascinarla indietro?
henryaaron,

Risposte:


9

Se "Ripristina" è disabilitato per una selezione di più elementi, significa che (almeno) uno degli elementi selezionati non ha le informazioni sulla posizione originale memorizzate nel file .DS_Store della directory Cestino.

Sebbene non sia l'ideale, prova a selezionare sottoinsiemi multipli di file in cerca di gruppi che puoi "rimettere" in massa prima di ricorrere all'archiviazione manuale per i file rimanenti.


1
Non riesco a "rimettere" i file in massa. Posso selezionare uno dei file e l'opzione per rimettere è lì ma quando seleziono entrambi "Riporta" non è disponibile. Quindi non penso che tu possa "rimandare" in massa. Forse con uno script di mele ...
Steve Moser,

6
Questa risposta non è corretta Sono in uno stato in cui qualsiasi singolo file può essere "Riprendi" ma se seleziono più di un file non posso, il che è incompatibile con la tua risposta.
Tom Swirly,

La risposta è davvero errata. Ho fle A e file B nella mia spazzatura. Selezionandoli singolarmente mi dà l'opzione di rimonta quando si fa il giusto clic, selezionandoli entrambi e poi facendo clic con il tasto destro, l'opzione Rimetti non c'è più.
Chiave inglese,

5

Prova a eseguire uno script come questo in AppleScript Editor:

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

Se Finder mostra una finestra di dialogo della password quando tenti di ripristinare alcuni elementi, prova ad aggiungere qualcosa del genere alla fine del tell application "System Events"blocco:

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

Per qualche motivo, questo ha funzionato molto lentamente per me mentre quello di @ThierryKoblentz era circa 50 volte più veloce. Non ho esplorato il perché.
Rory,

3

Un AppleScript che "Riporta tutti gli elementi nel Cestino" ha funzionato per me:

Apri "AppleScript Editor" e copia / incolla le righe sottostanti, quindi esegui lo script tutte le volte che è necessario.

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
Questo ha funzionato per me su macOS Sierra. Cordiali saluti: il codice tasto 126 è attivo e il codice chiave 51 è backspace. È possibile modificare le 3 linee premuto il tasto ... fino chiave ... a uno: key code 51 using key command down. (Questo è adattato da un'altra risposta. I file ripristinati sul mio desktop volevano la mia password di sistema, che incasinava questo script. Ho cancellato quelli e ripristinato manualmente quei pochi.
Eric Hu

Per me su MacOS Mojave, questa soluzione è stata un incubo. Ogni elemento che è stato rimesso dal cestino, ha aperto una nuova finestra del Finder nella cartella di origine di quell'elemento. Quindi il codice ha iniziato a selezionare gli elementi nella finestra del Finder corrente (alcuni dei quali erano cartelle con azioni sulle cartelle allegate) che sono stati attivati.
wch1zpink,

3

Questo codice AppleScript funziona per me utilizzando l'ultima versione di macOS Mojave.

Questo codice eseguirà il ciclo di ogni elemento nel cestino, riportando ciascun elemento nella posizione originale.

Se una delle cartelle di origine originali dei file nel Cestino non esiste più, il repeat until trashCount is 0comando uscirà dal ciclo. Tutti i file rimanenti nel Cestino saranno solo file che non è stato possibile ripristinare a causa di questo motivo.

AGGIORNARE

Poiché è possibile selezionare un elemento sul desktop durante il ciclo di ripetizione del processo di reimpostazione dei file dal cestino, l'elemento del desktop selezionato può essere catturato nel processo e spostato nel cestino. Per evitare questo scenario, ho aggiunto un codice che bloccherà gli oggetti Desktop attualmente sbloccati e li sbloccherà alla fine dello script.

Poiché tutti gli elementi del desktop sono ora bloccati ... Durante il processo di reimpostazione dei file dal cestino, se per qualche motivo si seleziona accidentalmente un file o una cartella sul desktop e il codice tenta di elaborare quell'elemento del desktop selezionato ... genera una finestra di dialogo in cui viene indicato che l'elemento è bloccato e chiedi se desideri continuare a inviarlo nel cestino. Gli eventi di sistema indicano che il blocco verso la fine dello script gestirà una di quelle finestre di dialogo che potrebbero essere state generate.

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

L'OP ha ~ 7,5 anni, quindi, sebbene non sia più applicabile al problema dell'OP, è comunque bello avere uno script automatico aggiornato che gestisca le versioni di macOS che aprono una nuova finestra che mostra il file rimandato. Probabilmente dovresti, come nota di utilizzo, informare l'utente che per usarlo, non si deve toccare il computer fino a quando non è finito a causa della natura degli UI Scripting. Non deve necessariamente essere un messaggio presentato dall'esecuzione dello script ma come una nota nella risposta.
user3439894

A proposito avrei +1, ma il bug nel ciclo di ripetizione è inaccettabile perché potrebbe essere codificato per gestire la situazione che lo causa!
user3439894

@ user3439894 Ho aggiornato il codice ... Dov'è il mio +1? LOL
wch1zpink,

1
Guarda come è stato facile! :) +1
user3439894

1

dovresti essere in grado di evidenziare ogni file o almeno farlo in batch incrementali, copiarli e incollarli nuovamente credo. L'ho appena provato e se fai doppio clic sul cestino, quindi fai clic con il pulsante destro del mouse sui file che desideri ripristinare, c'è un'opzione "rimonta" che funziona solo file per file, come detto vorrei evidenziare quindi premere Cc (comando c) per copiare quindi Cv (comando v) per incollarli indietro.


1

Questo ha funzionato per me:

  • Crea una nuova cartella nel Finder, ho chiamato il mio "file recuperati"
  • Apri la cartella Cestino e seleziona un gruppo di file
  • Copia i file e incollali nella cartella "file recuperati".

Se è necessario ripristinare una cartella di grandi dimensioni o un numero elevato di singoli file, utilizzare questa tecnica. Se hai bisogno solo di 1 o 2 file, usa semplicemente la funzione "rimetti".


1
Sbagliato: questo di nuovo in realtà non "rimette" i file e non risolve il problema, li prende semplicemente tutti e li getta in un grande mucchio.
Tom Swirly,

1

Prima di Snow Leopard, OS X non ha la possibilità di ripristinare in modo nativo i file nelle posizioni originali da cui sono stati eliminati (come può essere fatto in modo nativo in un ambiente Windows con l'opzione "Ripristina" nel menu di scelta rapida per Cestino). Ho fatto accidentalmente la stessa cosa di tua moglie a un certo punto con circa 10.000 oltre i file eliminati.

Dopo aver esplorato tutte le mie opzioni, ho eseguito un ripristino del sistema tramite Time Machine. È stato di gran lunga il metodo più conveniente per portare i file nella loro posizione corretta.


2
Bene, come puoi facilmente dedurre da altre risposte qui, è possibile ripristinare file / cartelle dal Cestino: apri Cestino, fai clic con il pulsante destro del mouse su un file e seleziona "Riporta".
Nohillside

1

Trascina tutti i file dal Cestino nella scheda Tutti i miei file nel Finder. Ci vorrà un po 'se hai molti file. Abbiamo testato su oltre 10000 file. Finder ripristinerà tutti i file nella posizione originale.


2
Questo non fa nulla su macOS Sierra
Cyril Duchon-Doris il

0

Basandoci su una soluzione vicina che @thierry ha già fornito qui da Giacomo Balli , abbiamo creato questa soluzione per aiutare molti di voi, poiché il problema persiste. Quando elimini un file in MacOS , le sue posizioni originali vengono archiviate in.DsStorefile nascosti nel caso si desideri ripristinarlo. Le versioni recenti di macOS hanno la possibilità di rimettere le cose nel Cestino da dove provengono, divise in modo leccante, ed è molto più veloce del trascinamento della selezione. Quindi, come sai, se fai clic sull'icona del cestino nel Dock, vedrai gli elementi che hai, beh, il cestino. Fai clic con il pulsante destro del mouse o fai clic tenendo premuto il tasto Ctrl su qualsiasi file (o tieni premuto Comando per fare clic e selezionare più elementi, quindi fai clic tenendo premuto il tasto Ctrl) e visualizzerai l'opzione Ripristina. L'unico problema è che ci consente di farlo per un solo oggetto alla volta.

Soluzione

  1. Inizia clonando il repository sul tuo computer locale in modo da poter iniziare a utilizzare la nostra soluzione;

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

    cd trash-back

  2. Esegui AppleScript su quel computer, tramite il comando osascript;

    script osascript / trash-back.scpt

conclusioni

L'esecuzione di AppleScript aumenta notevolmente le operazioni che è possibile eseguire in remoto dalla riga di comando e consente molti trucchi interessanti che è difficile fare diversamente. Mentre è possibile eseguire interi script nella riga di comando, questo modo di eseguire riguarda solo l'esecuzione può anche accedere a un computer remoto (usando ssh) ed eseguire AppleScript su quel computer, tramite il osascriptcomando. Il osascriptcomando può anche eseguire qualsiasi altro linguaggio Open Scripting Architecture usando il modificatore -l.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.