Existe uma maneira de colocar tudo de volta no lixo automaticamente?

16

Minha esposa viu a pasta 'todos os documentos' no Finder e decidiu mudar tudo para o lixo.

Agora, temos mais de 9.000 arquivos no lixo e não consegui encontrar uma maneira de colocar tudo de volta com um clique.

Por alguma razão, isso só permitirá que eu retenha um arquivo de cada vez.

Existe alguma maneira de automatizar isso?

novicePrgrmr
fonte
1
Se ela arrastou a pasta para a lixeira, basta arrastá-la de volta?
Henryaaron

Respostas:

9

Se "Retornar" estiver desativado para uma seleção de vários itens, significa que (pelo menos) um dos itens selecionados não possui suas informações de localização originais armazenadas no arquivo .DS_Store do diretório da Lixeira.

Embora não seja o ideal, tente selecionar vários subconjuntos dos arquivos procurando grupos que você possa "Colocar de volta" em massa antes de recorrer ao arquivamento manual dos arquivos restantes.

jaberg
fonte
1
Não consigo "arquivar" arquivos em massa. Posso selecionar um arquivo e a opção de colocar de volta existe, mas quando seleciono "Put Back" não está disponível. Portanto, acho que você não pode "Recuar" em massa. Talvez com um embora applescript ...
Steve Moser
6
Esta resposta está incorreta. Estou em um estado em que qualquer arquivo individual pode ser "colocado de volta", mas se eu selecionar mais de um arquivo, não posso, o que é inconsistente com sua resposta.
Tom Swirly
A resposta está realmente incorreta. Eu tenho um arquivo A e arquivo B no meu lixo. Selecionar neles individualmente me dá a opção de colocar de volta ao clicar com o botão direito do mouse. Selecionando os dois e, em seguida, clicando com o botão direito do mouse, a opção Put Back se foi.
Chave
5

Tente executar um script como este no 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 o Finder mostrar uma caixa de diálogo de senha ao tentar colocar de volta algum item, tente adicionar algo assim ao final do tell application "System Events"bloco:

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
fonte
Por algum motivo, isso correu bem devagar para mim, enquanto o de ThierryKoblentz foi cerca de 50x mais rápido. Eu não explorei o porquê.
Rory
3

Um AppleScript que "Coloque todos os itens de volta no lixo" funcionou para mim:

Abra o "AppleScript Editor" e copie / cole as linhas abaixo e execute o script quantas vezes for necessário.

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
fonte
1
Isso funcionou para mim no macOS Sierra. FYI: o código da chave 126 está ativo e o código da chave 51 está no backspace. Você pode modificar as 3 linhas de tecla para baixo ... em cima de chave ... para um: key code 51 using key command down. (Isto é adaptado de outra resposta arquivos restaurados para o meu desktop queria que a minha senha do sistema, que mexeu com esse script Cancelei aqueles e manualmente restaurado aqueles poucos...
Eric Hu
Para mim, no MacOS Mojave, essa solução foi um pesadelo. Cada item que foi retirado da lixeira abriu uma nova janela do Finder na pasta de origem desse item. Em seguida, o código começou a selecionar itens na janela atual do Finder (alguns dos quais eram pastas com ações de pastas anexadas) que foram acionados.
wch1zpink 18/06/19
3

Esse código AppleScript funciona para mim usando a versão mais recente do macOS Mojave.

Esse código percorrerá todos os itens da lixeira, retornando cada item ao local original.

Se alguma das pastas de origem originais dos arquivos na Lixeira não existir mais, o repeat until trashCount is 0comando sairá do loop. Todos os arquivos restantes na Lixeira serão apenas arquivos que não puderam ser recuperados por esse motivo.

ATUALIZAR

Como é possível selecionar um item na área de trabalho durante o ciclo de repetição do processo de devolução de arquivos da lixeira, o item da área de trabalho selecionado pode ser pego no processo e ser movido para a lixeira. Para evitar esse cenário, adicionei um código que bloqueará os itens da área de trabalho desbloqueados no momento e também os desbloqueará no final do script.

Como agora todos os itens da área de trabalho estão bloqueados ... Durante o processo de colocar de volta os arquivos da lixeira, se por algum motivo você selecionar acidentalmente um arquivo ou pasta na área de trabalho e o código tentar processar esse item da área de trabalho selecionado ... gere uma janela de diálogo mencionando que o item está bloqueado e pergunte se você deseja continuar enviando-o para a lixeira. O bloco Tell do System Events no final do script tratará de todas as caixas de diálogo que possam ter sido geradas.

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
fonte
O OP tem ~ 7,5 anos, portanto, embora não seja mais aplicável ao problema do OP, é bom ter um script automatizado atualizado que lide com as versões do macOS que abrem uma nova janela mostrando o arquivo adiado. Provavelmente, como nota de uso, informe ao usuário que, para usar isso, não é necessário tocar no computador até que esteja concluído, devido à natureza dos scripts da interface do usuário. Não precisa necessariamente ser uma mensagem apresentada pela execução do script, mas como uma nota na resposta.
user3439894
BTW, eu teria +1, mas o erro no loop de repetição é inaceitável, pois poderia ser codificado para lidar com a situação que o causa!
user3439894
@ user3439894 Atualizei o código ... Onde está o meu +1? LOL
wch1zpink 18/06/19
1
Veja como foi fácil! :) +1
user3439894
1

você deve destacar todos os arquivos ou, pelo menos, fazê-lo em lotes incrementais, copiá-los e colá-los novamente, acredito. Eu apenas tentei e se você clicar duas vezes no seu lixo, clique com o botão direito do mouse nos arquivos que deseja restaurar, existe uma opção "colocar de volta" que funciona apenas arquivo por arquivo, como disse eu destacaria e pressione Cc (comando c) para copiar depois Cv (comando v) para colá-los novamente.

Gmenfan83
fonte
1

Isso funcionou para mim:

  • Crie uma nova pasta no Finder, chamei de "arquivos recuperados"
  • Abra a pasta Lixeira e selecione um grupo de arquivos
  • Copie arquivos e cole na pasta "arquivos recuperados".

Se você precisar colocar de volta uma pasta grande ou um grande número de arquivos individuais, use esta técnica. Se você precisar de apenas 1 ou 2 arquivos, use o recurso "adiar".

Marcy Freeman
fonte
1
Errado - isso de novo não "repõe" os arquivos e não resolve o problema, apenas os pega e os joga em uma pilha grande.
Tom Swirly
1

Antes do Snow Leopard, o OS X não podia nativamente restaurar os arquivos para os locais originais dos quais foram excluídos (como pode ser feito nativamente em um ambiente Windows com a opção "Restaurar" no menu de contexto da Lixeira). Acidentalmente, fiz a mesma coisa que sua esposa em um momento, com cerca de 10.000 arquivos a serem excluídos.

Depois de explorar todas as minhas opções, realizei uma restauração do sistema via Time Machine. De longe, era o método mais conveniente para levar esses arquivos para os locais adequados.

Mort
fonte
2
Bem, como você pode deduzir facilmente de outras respostas aqui, é possível recuperar arquivos / pastas do Lixo: abra o Lixo, clique com o botão direito do mouse em um arquivo e selecione "Repor".
nohillside
1

Arraste todos os arquivos da lixeira para a guia Todos os meus arquivos no Finder. Vai demorar um pouco se você tiver muitos arquivos. Testamos em mais de 10000 arquivos. O Finder restaurará todos os arquivos em seu local original.

Jacob Cereteli
fonte
2
Isso não faz nada no MacOS Sierra
Cyril Duchon-Doris
0

Com base em uma solução próxima que @thierry já deu aqui de Giacomo Balli , criamos essa solução para ajudar vários de vocês, pois o problema ainda permanece. Quando você exclui um arquivo no MacOS , seus locais originais são armazenados no.DsStorearquivos ocultos no caso de você querer restaurá-lo. As versões recentes do macOS têm a capacidade de colocar as coisas no seu Lixo de volta de onde vieram, com uma divisão superficial, e é muito mais rápido do que arrastar e soltar. Então, como você sabe, se você clicar no ícone da lixeira no Dock, verá os itens que você colocou na lixeira. Clique com o botão direito do mouse ou clique com a tecla Control pressionada em qualquer arquivo (ou mantenha pressionada a tecla Command para clicar e selecionar vários itens, depois clique com a tecla Control pressionada) e você verá a opção Retornar. O único problema é que vamos fazê-lo para apenas um item por vez.

Solução

  1. Comece clonando o repositório na sua máquina local para poder começar a usar nossa solução;

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

    cd lixeira de volta

  2. Execute o AppleScript nesse computador, através do comando osascript;

    scripts osascript / trash-back.scpt

Conclusões

A execução do AppleScript aumenta muito o que você pode fazer remotamente a partir da linha de comando e permite muitos truques interessantes que são difíceis de fazer de outra maneira. Embora você possa executar scripts inteiros na linha de comando, esse modo de execução é apenas sobre a execução. Também é possível fazer login em um computador remoto (usando ssh) e executar o AppleScript nesse computador, por meio do osascriptcomando O osascriptcomando também pode executar qualquer outra linguagem da Open Scripting Architecture usando o modificador -l.

Francisco Maria Calisto
fonte