¿Hay alguna forma de "volver a poner" todo en la Papelera?

16

Mi esposa vio la carpeta 'todos los documentos' en Finder y decidió moverlo todo a la basura.

Ahora tenemos más de 9,000 archivos en la papelera y no he podido encontrar una manera de volver a colocar todo con un solo clic.

Por alguna razón, solo me permitirá "volver a colocar" un archivo a la vez.

¿Hay alguna forma de automatizar esto?

novicePrgrmr
fuente
1
Si ella arrastró la carpeta a la basura, ¿simplemente la arrastró de vuelta?
henryaaron

Respuestas:

9

Si "Volver a poner" está deshabilitado para una selección de elementos múltiples, significa que (al menos) uno de los elementos seleccionados no tiene su información de ubicación original almacenada en el archivo .DS_Store del directorio Papelera.

Aunque no es lo ideal, intente seleccionar múltiples subconjuntos de los archivos en busca de grupos que pueda "volver a colocar" en masa antes de recurrir a la presentación manual de los archivos restantes.

jaberg
fuente
1
Parece que no puedo "volver a poner" los archivos en masa. Puedo seleccionar cualquiera de los archivos y la opción de volver a colocar está ahí, pero cuando selecciono ambos, "Volver a poner" no está disponible. Por lo tanto, no creo que pueda "poner de nuevo" en masa. Tal vez con un applecript aunque ...
Steve Moser
66
Esta respuesta es incorrecta. Estoy en un estado en el que cualquier archivo individual se puede "Volver a colocar", pero si selecciono más de un archivo, no puedo, lo cual es inconsistente con su respuesta.
Tom Swirly
La respuesta es de hecho incorrecta. He tirado A y archivo B en mi basura. Seleccionarlos individualmente me da la opción de retroceder cuando hago clic derecho, seleccionándolos a ambos y luego haciendo clic con el botón derecho, la opción de retroceder desaparece.
Llave
5

Intente ejecutar un script como este en 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 Finder muestra un diálogo de contraseña cuando intenta volver a colocar algún elemento, intente agregar algo como esto al final del tell application "System Events"bloque:

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
fuente
Por alguna razón, esto fue muy lento para mí, mientras que el de @ThierryKoblentz fue aproximadamente 50 veces más rápido. No exploré por qué.
Rory
3

Un AppleScript que "puso [s] de vuelta todos los elementos en la papelera" funcionó para mí:

Abra "AppleScript Editor" y copie / pegue las líneas a continuación, luego ejecute el script tantas veces como sea necesario.

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
fuente
1
Esto funcionó para mí en macOS Sierra. FYI: el código clave 126 está activo y el código clave 51 es retroceso. Puede modificar las 3 líneas pulsada la tecla ... hasta clave ... a uno: key code 51 using key command down. (Esto está adaptado de otra respuesta. Los archivos restaurados en mi escritorio querían mi contraseña del sistema, lo que confundió con este script. Los cancelé y restauré manualmente esos pocos.
Eric Hu
Para mí en MacOS Mojave, esta solución fue una pesadilla. Cada elemento que se devolvió de la papelera abrió una nueva ventana del Finder en la carpeta de origen de ese elemento. Luego, el código comenzó a seleccionar elementos en la ventana del Finder actual (algunos de los cuales eran carpetas con acciones de carpeta adjuntas) que luego se activaron.
wch1zpink
3

Este código AppleScript funciona para mí usando la última versión de macOS Mojave.

Este código recorrerá cada elemento de la papelera, devolviendo cada elemento a su ubicación original.

Si alguna de las carpetas de origen originales de los archivos en la Papelera ya no existe, el repeat until trashCount is 0 comando saldrá del bucle. Los archivos restantes en la Papelera solo serán archivos que no se pudieron volver a colocar por este motivo.

ACTUALIZAR

Como es posible seleccionar un elemento en su escritorio durante el ciclo de repetición del proceso de volver a colocar los archivos de la papelera, el elemento de escritorio seleccionado puede quedar atrapado en el proceso y trasladarse a la papelera. Para evitar este escenario, agregué un código que bloqueará los elementos de escritorio actualmente desbloqueados y también los desbloqueará al final del script.

Debido a que todos los elementos de escritorio ahora están bloqueados ... Durante el proceso de volver a colocar archivos de la papelera, si por alguna razón selecciona accidentalmente un archivo o carpeta en su escritorio y el código intenta procesar ese elemento de escritorio seleccionado ... genere una ventana de diálogo que mencione que el elemento está bloqueado y pregunte si desea continuar enviándolo a la papelera. El bloque de información de Eventos del sistema hacia el final del script manejará cualquiera de esos cuadros de diálogo que se hayan generado.

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
fuente
El OP tiene ~ 7.5 años, por lo que, aunque ya no es aplicable al problema del OP, no obstante es bueno tener un script automatizado actualizado que maneje las versiones de macOS que abren una nueva ventana que muestra el archivo devuelto. Probablemente debería, como nota de uso, informar al usuario que para usar esto, uno no debe tocar la computadora hasta que haya terminado debido a la naturaleza de las secuencias de comandos de la interfaz de usuario. No necesariamente tiene que ser un mensaje presentado por la ejecución del script, sino como una nota en la respuesta.
user3439894
Por cierto, tendría +1, ¡pero el error en el ciclo de repetición es inaceptable porque podría codificarse para manejar la situación que lo causa!
user3439894
@ user3439894 Actualicé el código ... ¿Dónde está mi +1? LOL
wch1zpink
1
¡Ves que fácil fue eso! :) +1
user3439894
1

deberías poder resaltar cada archivo o al menos hacerlo en lotes incrementales, copiarlos y volver a pegarlos, creo. Acabo de probarlo y si hace doble clic en su bote de basura, haga clic derecho en los archivos que desea restaurar, hay una opción de "volver a colocar" que solo funciona archivo por archivo, como dije, resaltaría y luego presione Cc (comando c) para copiar luego Cv (comando v) para pegarlos de nuevo.

Gmenfan83
fuente
1

Esto funcionó para mí:

  • Crear una nueva carpeta en Finder, llamé a la mía "archivos recuperados"
  • Abra la carpeta Papelera y seleccione un grupo de archivos
  • Copie archivos y péguelos en la carpeta "archivos recuperados".

Si necesita volver a colocar una carpeta grande o una gran cantidad de archivos individuales, use esta técnica. Si solo necesita 1 o 2 archivos, simplemente use la función "volver a colocar".

Marcy Freeman
fuente
1
Incorrecto: esto nuevamente no "vuelve a colocar" los archivos y no resuelve el problema, simplemente los toma a todos y los arroja en una gran pila.
Tom Swirly
1

Antes de Snow Leopard, OS X no tiene la capacidad nativa de restaurar archivos a sus ubicaciones originales de donde fueron eliminados (como se puede hacer de forma nativa en un entorno Windows con la opción "Restaurar" en el menú contextual de la Papelera de reciclaje). Accidentalmente hice lo mismo que hizo su esposa en un momento dado con la eliminación de más de 10,000 archivos.

Después de explorar todas mis opciones, realicé una restauración del sistema a través de Time Machine. Fue, con mucho, el método más conveniente para llevar dichos archivos a sus ubicaciones adecuadas.

Mort
fuente
2
Bueno, como puede deducir fácilmente de otras respuestas aquí, es posible volver a colocar archivos / carpetas de la Papelera: abra la Papelera, haga clic con el botón derecho en un archivo y seleccione "Volver a colocar".
nohillside
1

Arrastre todos los archivos de la Papelera a la pestaña Todos mis archivos en Finder. Tomará un tiempo si tiene muchos archivos. Probamos en más de 10000 archivos. Finder restaurará todos los archivos a su ubicación original.

Jacob Cereteli
fuente
2
Esto no hace nada en macOS Sierra
Cyril Duchon-Doris
0

Basado en una solución cercana que @thierry ya dio aquí de Giacomo Balli , creamos esta solución para ayudar a varios de ustedes, ya que el problema aún persiste. Cuando elimina un archivo en MacOS , su ubicación original es almacenan en.DsStorearchivos ocultos en caso de que quiera restaurarlo. Las versiones recientes de macOS tienen la capacidad de poner cosas en su Papelera de donde provienen, divididas con lickety, y es mucho más rápido que arrastrar y soltar. Entonces, como sabes, si haces clic en el ícono de la papelera en tu Dock, verás los elementos que tienes, bueno, en la papelera. Haga clic con el botón derecho o presione Control y haga clic en cualquier archivo (o mantenga presionada la tecla Comando para hacer clic y seleccionar varios elementos, luego presione Control y haga clic) y verá la opción Volver a colocar. El único problema es que nos permite hacerlo por un solo artículo a la vez.

Solución

  1. Comience clonando el repositorio en su máquina local para que pueda comenzar a usar nuestra solución;

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

    cd trash-back

  2. Ejecute el AppleScript en esa computadora, a través del comando osascript;

    guiones osascript / trash-back.scpt

Conclusiones

Ejecutar AppleScript aumenta en gran medida lo que puede hacer de forma remota desde la línea de comandos, y permite muchos trucos geniales que son difíciles de hacer de otra manera. Si bien puede ejecutar scripts completos en la línea de comandos, esta forma de ejecución solo se trata de ejecutar, también puede iniciar sesión en una computadora remota (usando ssh) y ejecutar AppleScript en esa computadora, a través del osascriptcomando. El osascriptcomando también puede ejecutar cualquier otro lenguaje de Open Scripting Architecture usando el modificador -l.

Francisco Maria Calisto
fuente