Existe-t-il un moyen de «remettre» automatiquement tout dans la corbeille?

16

Ma femme a vu le dossier «tous les documents» dans le Finder et a décidé de tout mettre à la poubelle.

Maintenant, nous avons plus de 9 000 fichiers dans la corbeille et je n'ai pas pu trouver un moyen de tout remettre en un seul clic.

Pour une raison quelconque, cela ne me permettra de «remettre» qu'un fichier à la fois.

Existe-t-il un moyen d'automatiser cela?

novicePrgrmr
la source
1
Si elle a fait glisser le dossier dans la corbeille, il suffit de le faire glisser vers l'arrière?
henryaaron

Réponses:

9

Si "Mettre en arrière" est désactivé pour une sélection de plusieurs éléments, cela signifie que (au moins) l'un des éléments sélectionnés n'a pas ses informations d'emplacement d'origine stockées dans le fichier .DS_Store du répertoire de la corbeille.

Bien qu'il ne soit pas idéal, essayez de sélectionner plusieurs sous-ensembles de fichiers à la recherche de groupes que vous pouvez "remettre" en masse avant de recourir au classement manuel pour les fichiers restants.

jaberg
la source
1
Je n'arrive pas à "remettre" les fichiers en masse. Je peux sélectionner l'un ou l'autre des fichiers et l'option de remise est là, mais lorsque je sélectionne les deux, "Remettre" n'est pas disponible. Je ne pense donc pas que vous puissiez "remettre" en masse. Peut-être avec un script Apple ...
Steve Moser
6
Cette réponse est incorrecte. Je suis dans un état où n'importe quel fichier individuel peut être "remis" mais si je sélectionne plus d'un fichier je ne peux pas, ce qui est incompatible avec votre réponse.
Tom Swirly
La réponse est en effet incorrecte. J'ai fauché A et classé B dans ma poubelle. Les sélectionner individuellement me donne l'option de remise en place lorsque vous cliquez avec le bouton droit, en les sélectionnant tous les deux, puis en cliquant avec le bouton droit, l'option de remise en place a disparu.
Clé
5

Essayez d'exécuter un script comme celui-ci dans 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

Si le Finder affiche une boîte de dialogue de mot de passe lorsque vous essayez de remettre un élément, essayez d'ajouter quelque chose comme ceci à la fin du tell application "System Events"bloc:

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
la source
Pour une raison quelconque, cela a fonctionné très lentement pour moi, tandis que celui de @ThierryKoblentz était environ 50 fois plus rapide. Je n'ai pas exploré pourquoi.
Rory
3

Un AppleScript qui "remet tous les éléments dans la corbeille" a fonctionné pour moi:

Ouvrez "AppleScript Editor" et copiez / collez les lignes ci-dessous, puis exécutez le script autant de fois que nécessaire.

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
la source
1
Cela a fonctionné pour moi sur macOS Sierra. Pour info: le code clé 126 est en hausse et le code clé 51 est le retour arrière. Vous pouvez modifier les 3 lignes vers le bas clé ... jusqu'à clé ... une: key code 51 using key command down. (Ceci est adapté d'une autre réponse. Les fichiers restaurés sur mon bureau voulaient mon mot de passe système, qui a foiré ce script. J'ai annulé ceux-ci et restauré manuellement ceux-ci.
Eric Hu
Pour moi sur MacOS Mojave, cette solution était un cauchemar. Chaque élément qui a été remis dans la corbeille a ouvert une nouvelle fenêtre du Finder dans le dossier source de cet élément. Ensuite, le code a commencé à sélectionner des éléments dans la fenêtre actuelle du Finder (dont certains étaient des dossiers avec des actions de dossier jointes) qui ont ensuite été déclenchés.
wch1zpink
3

Ce code AppleScript fonctionne pour moi en utilisant la dernière version de macOS Mojave.

Ce code parcourra chaque élément de la corbeille, remettant chaque élément à son emplacement d'origine.

Si l'un des dossiers source d'origine des fichiers dans la Corbeille n'existe plus, la repeat until trashCount is 0commande quittera la boucle. Tous les fichiers restants dans la corbeille ne seront que des fichiers qui n'ont pas pu être restaurés pour cette raison.

MISE À JOUR

Puisqu'il est possible de sélectionner un élément sur votre bureau pendant la boucle de répétition du processus de remise de fichiers de la corbeille, l'élément de bureau sélectionné peut être rattrapé dans le processus et être déplacé vers la corbeille. Pour éviter ce scénario, j'ai ajouté du code qui verrouillera les éléments du bureau actuellement déverrouillés et les déverrouillera également à la fin du script.

Parce que tous les éléments du Bureau sont maintenant verrouillés ... Pendant le processus de remise des fichiers de la corbeille, si pour une raison quelconque vous sélectionnez accidentellement un fichier ou un dossier sur votre bureau et que le code tente de traiter cet élément du bureau sélectionné ... Il générer une fenêtre de dialogue mentionnant que l'élément est verrouillé et demander si vous souhaitez continuer à l'envoyer à la corbeille. Le bloc Tell des événements système vers la fin du script gérera toutes les boîtes de dialogue qui peuvent avoir été générées.

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
la source
L'OP a environ 7,5 ans, donc bien qu'il ne soit plus applicable au problème de l'OP, il est néanmoins agréable d'avoir un script automatisé mis à jour qui gère les versions de macOS qui ouvrent une nouvelle fenêtre affichant le fichier remis. Vous devriez probablement, en tant que note d'utilisation, informer l'utilisateur que pour l'utiliser, il ne faut pas toucher l'ordinateur jusqu'à ce qu'il soit terminé en raison de la nature des scripts UI. Ne doit pas nécessairement être un message présenté par l'exécution du script mais comme une note dans la réponse.
user3439894
BTW j'aurais +1, mais le bug dans la boucle de répétition est inacceptable car il pourrait être codé pour gérer la situation qui le provoque!
user3439894
@ user3439894 J'ai mis à jour le code ... Où est mon +1? LOL
wch1zpink
1
Vous avez vu comme c'était facile! :) +1
user3439894
1

vous devriez pouvoir mettre en surbrillance chaque fichier ou au moins le faire par lots incrémentiels, les copier puis les recoller, je crois. Je viens de l'essayer et si vous double-cliquez sur votre corbeille, puis cliquez avec le bouton droit sur les fichiers que vous souhaitez restaurer, il existe une option de "remise" qui ne fonctionne que fichier par fichier, comme je l'ai dit, je le mettrais en surbrillance, puis appuyez sur Cc (commande c) pour copier puis Cv (commande v) pour les recoller.

Gmenfan83
la source
1

Cela a fonctionné pour moi:

  • Créer un nouveau dossier dans le Finder, j'ai appelé le mien "fichiers récupérés"
  • Ouvrez le dossier Corbeille et sélectionnez un groupe de fichiers
  • Copiez les fichiers et collez-les dans le dossier "fichiers récupérés".

Si vous devez remettre un grand dossier ou un grand nombre de fichiers individuels, utilisez cette technique. Si vous n'avez besoin que de 1 ou 2 fichiers, utilisez simplement la fonction "remettre".

Marcy Freeman
la source
1
Faux - cela ne "remet" pas les fichiers et ne résout pas le problème, il les prend tous et les jette dans une grosse pile.
Tom Swirly
1

Avant Snow Leopard, OS X n'a ​​pas nativement la possibilité de restaurer les fichiers à leur emplacement d'origine d'où ils ont été supprimés (comme cela peut être fait nativement dans un environnement Windows avec l'option "Restaurer" dans le menu contextuel de la Corbeille). J'ai accidentellement fait la même chose que votre femme à un moment donné avec environ 10 000 fichiers et plus supprimés.

Après avoir exploré toutes mes options, j'ai effectué une restauration du système via Time Machine. C'était de loin la méthode la plus rapide pour amener lesdits fichiers à leur emplacement approprié.

Mort
la source
2
Eh bien, comme vous pouvez facilement en déduire d'autres réponses ici, il est possible de remettre des fichiers / dossiers de la Corbeille: ouvrez la Corbeille, faites un clic droit sur un fichier et sélectionnez "Remettre".
nohillside
1

Faites glisser tous les fichiers de la corbeille vers l'onglet Tous mes fichiers dans le Finder. Cela prendra un certain temps si vous avez beaucoup de fichiers. Nous avons testé sur plus de 10000 fichiers. Le Finder restaurera tous les fichiers à leur emplacement d'origine.

Jacob Cereteli
la source
2
Cela ne fait rien sur macOS Sierra
Cyril Duchon-Doris
0

Sur la base d'une solution proche que @thierry a déjà donnée ici de Giacomo Balli , nous avons créé cette solution pour aider plusieurs d'entre vous, car le problème persiste. Lorsque vous supprimez un fichier sous MacOS , son emplacement d'origine est stockés dans le.DsStorefichiers cachés au cas où vous voudriez le restaurer. Les versions récentes de macOS ont la possibilité de remettre des éléments dans votre corbeille d'où ils viennent, divisés par lickety, et c'est beaucoup plus rapide que de glisser-déposer. Donc, comme vous le savez, si vous cliquez sur l'icône de la corbeille dans votre Dock, vous verrez les éléments que vous avez, eh bien, mis à la poubelle. Cliquez avec le bouton droit de la souris ou tout en maintenant la touche Ctrl enfoncée sur n'importe quel fichier (ou maintenez la touche Commande enfoncée pour cliquer et sélectionner plusieurs éléments, puis cliquez sur Ctrl) et vous verrez l'option Remettre. Le seul problème est qu'il nous permet de le faire pour un seul article à la fois.

Solution

  1. Commencez par cloner le référentiel sur votre machine locale afin que vous puissiez commencer à utiliser notre solution;

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

    cd corbeille

  2. Exécutez AppleScript sur cet ordinateur, via la commande osascript;

    scripts JavaScript / trash-back.scpt

Conclusions

L'exécution d' AppleScript augmente considérablement ce que vous pouvez faire à distance à partir de la ligne de commande et permet de nombreuses astuces intéressantes qui sont difficiles à faire autrement. Bien que vous puissiez exécuter des scripts entiers dans la ligne de commande, cette façon de fonctionner ne consiste qu'à exécuter peut également se connecter à un ordinateur distant (à l'aide de ssh) et exécuter le AppleScript sur cet ordinateur, via la osascriptcommande. La osascriptcommande peut également exécuter n'importe quel autre langage Open Scripting Architecture à l'aide du modificateur -l.

Francisco Maria Calisto
la source