Apakah ada cara untuk "mengembalikan" segala sesuatu di Sampah secara otomatis?


16

Istri saya melihat folder 'semua dokumen' di Finder dan memutuskan untuk memindahkan semuanya ke tempat sampah.

Sekarang kami memiliki lebih dari 9.000 file di tempat sampah dan saya belum dapat menemukan cara untuk mengembalikan semuanya dengan satu klik.

Untuk beberapa alasan hanya akan membiarkan saya 'mengembalikan' satu file sekaligus.

Apakah ada cara untuk mengotomatisasi ini?


1
Jika dia menyeret folder ke tempat sampah, maka cukup seret kembali?
henryaaron

Jawaban:


9

Jika "Put Back" dinonaktifkan untuk pemilihan banyak item, itu berarti (setidaknya) salah satu item yang dipilih tidak memiliki informasi lokasi aslinya disimpan di file .DS_Store direktori trash.

Meskipun kurang dari ideal, coba beberapa subhimpunan bagian dari file mencari grup yang dapat Anda "Kembalikan" secara massal sebelum menggunakan pengarsipan manual untuk file yang tersisa.


1
Sepertinya saya tidak bisa "mengembalikan" file secara massal. Saya dapat memilih salah satu file dan opsi untuk mengembalikan ada tetapi ketika saya memilih keduanya "Pasang Kembali" tidak tersedia. Jadi saya tidak berpikir Anda dapat "Pasang Kembali" secara massal. Mungkin dengan applescript ...
Steve Moser

6
Jawaban ini salah. Saya dalam kondisi di mana setiap file individual dapat "Pasang Kembali" tetapi jika saya memilih lebih dari satu file saya tidak bisa, yang tidak sesuai dengan jawaban Anda.
Tom Swirly

Jawabannya memang salah. Saya memiliki file A dan file B di tempat sampah saya. Memilih secara individual memberi saya opsi put back ketika klik kanan, Memilih keduanya dan kemudian mengklik kanan, opsi Put Back hilang.
Kunci pas

5

Coba jalankan skrip seperti ini di 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

Jika Finder menampilkan dialog kata sandi ketika Anda mencoba untuk mengembalikan beberapa item, coba tambahkan sesuatu seperti ini di akhir tell application "System Events"blok:

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

Untuk beberapa alasan ini berjalan sangat lambat untuk saya sedangkan yang oleh @ThierryKoblentz sekitar 50x lebih cepat. Saya tidak mencari tahu mengapa.
Rory

3

AppleScript yang "Kembalikan semua item ke Sampah" berfungsi untuk saya:

Buka "AppleScript Editor" dan salin / tempel baris di bawah ini, lalu jalankan skrip sebanyak yang diperlukan.

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
Ini bekerja untuk saya di macOS Sierra. FYI: kode kunci 126 naik dan kode kunci 51 adalah backspace. Anda dapat memodifikasi 3 baris kunci bawah ... kunci up ... satu: key code 51 using key command down. (Ini diadaptasi dari jawaban lain. File yang dipulihkan ke desktop saya menginginkan kata sandi sistem saya, yang kacau dengan skrip ini. Saya membatalkannya dan secara manual mengembalikan beberapa.
Eric Hu

Bagi saya di MacOS Mojave, solusi ini adalah mimpi buruk. Setiap item yang dikembalikan dari tempat sampah, membuka jendela Finder baru ke folder sumber item itu. Kemudian kode mulai memilih item di jendela Finder saat ini (beberapa di antaranya adalah folder dengan tindakan folder terlampir) yang kemudian dipicu.
wch1zpink

3

Kode AppleScript ini berfungsi untuk saya menggunakan versi terbaru dari macOS Mojave.

Kode ini akan mengulangi setiap item di tempat sampah, mengembalikan setiap item ke lokasi semula.

Jika salah satu folder sumber asli dari file di Sampah tidak ada lagi, repeat until trashCount is 0perintah akan keluar dari loop. File yang tersisa di Sampah hanya akan menjadi file yang tidak dapat dikembalikan karena alasan ini.

MEMPERBARUI

Karena dimungkinkan untuk memilih item pada desktop Anda selama loop berulang dari proses mengembalikan file dari tempat sampah, item desktop yang dipilih dapat terjebak dalam proses dan dipindahkan ke tempat sampah. Untuk menghindari skenario ini, saya menambahkan kode yang akan mengunci item Desktop yang saat ini tidak dikunci dan juga akan membuka kunci di akhir skrip.

Karena semua item Desktop sekarang dikunci ... Selama proses mengembalikan file dari tempat sampah, jika karena alasan tertentu Anda secara tidak sengaja memilih file atau folder di desktop Anda dan kode mencoba memproses item desktop yang dipilih ... Itu akan buat jendela dialog yang menyebutkan item itu dikunci dan tanyakan apakah Anda ingin terus mengirimkannya ke tempat sampah. Acara Sistem memberitahu blok menjelang akhir skrip akan menangani salah satu kotak dialog yang mungkin telah dihasilkan.

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

OP ~ 7.5 tahun, jadi meskipun tidak berlaku untuk masalah OP lagi, tetap saja bagus untuk memiliki skrip otomatis yang diperbarui yang menangani rilis macOS yang membuka jendela baru yang menunjukkan file put back. Anda mungkin harus, sebagai catatan penggunaan, memberi tahu pengguna bahwa untuk menggunakan ini, seseorang tidak boleh menyentuh komputer sampai selesai karena sifat dari Scripting UI. Tidak harus berupa pesan yang disajikan oleh jalannya skrip tetapi sebagai catatan dalam jawabannya.
user3439894

BTW saya akan memiliki +1, tetapi bug di loop berulang tidak dapat diterima karena bisa dikodekan untuk menangani situasi yang menyebabkannya!
user3439894

@ user3439894 Saya Memperbarui kode ... Di mana +1 saya? LOL
wch1zpink

1
Lihat betapa mudahnya itu! :) +1
user3439894

1

Anda harus dapat menyorot setiap file atau setidaknya melakukannya dalam batch tambahan, salin kemudian tempel ulang, saya percaya. Saya baru saja mencobanya dan jika Anda mengklik dua kali tempat sampah Anda kemudian klik kanan file yang ingin Anda pulihkan ada opsi "put back" yang hanya berfungsi file per file, seperti yang saya katakan akan sorot kemudian tekan Cc (perintah c) untuk menyalin lalu Cv (perintah v) untuk menempelkannya kembali.


1

Ini bekerja untuk saya:

  • Buat folder baru di Finder, yang saya sebut milikku "memulihkan file"
  • Buka folder Tempat Sampah dan pilih sekelompok file
  • Salin file dan rekatkan ke folder "file yang dipulihkan".

Jika Anda perlu mengembalikan folder besar, atau sejumlah besar file individual, gunakan teknik ini. Jika Anda hanya membutuhkan 1 atau 2 file, cukup gunakan fitur "put back".


1
Salah - ini lagi sebenarnya tidak "mengembalikan" file dan tidak menyelesaikan masalah, hanya mengambil semuanya dan melemparkannya ke dalam satu tumpukan besar.
Tom Swirly

1

Sebelum Snow Leopard, OS X tidak memiliki kemampuan untuk mengembalikan file ke lokasi asli tempat mereka dihapus (sebagaimana dapat dilakukan secara native di lingkungan Windows dengan opsi "Restore" dalam menu konteks untuk Recycle Bin). Saya tidak sengaja melakukan hal yang sama seperti yang dilakukan istri Anda pada satu titik dengan sekitar 10.000 file ditambahkan.

Setelah menjelajahi semua opsi saya, saya melakukan pengembalian sistem melalui Time Machine. Sejauh ini metode yang paling bijaksana untuk mendapatkan file tersebut ke lokasi yang tepat.


2
Nah, karena Anda dapat dengan mudah menarik kesimpulan dari jawaban lain di sini, Anda dapat mengembalikan file / folder dari Trash: buka Trash, klik kanan file dan pilih "Put Back".
nohillside

1

Seret semua file dari Trash ke tab All My Files di Finder. Ini akan memakan waktu cukup lama jika Anda memiliki banyak file. Kami menguji pada 10.000+ file. Finder akan mengembalikan semua file ke lokasi aslinya.


2
Ini tidak melakukan apa pun pada macOS Sierra
Cyril Duchon-Doris

0

Berdasarkan solusi dekat yang @thierry sudah berikan di sini dari Giacomo Balli , kami menciptakan solusi ini untuk membantu beberapa dari Anda, karena masalahnya masih ada. Ketika Anda menghapus file di MacOS , lokasi aslinya disimpan di.DsStorefile tersembunyi jika Anda ingin mengembalikannya. Versi terbaru dari macOS memiliki kemampuan untuk meletakkan barang-barang di tempat sampah Anda dari tempat asalnya, lickety-split, dan itu jauh lebih cepat daripada menyeret dan menjatuhkan. Jadi seperti yang Anda tahu, jika Anda mengklik ikon tempat sampah di Dock Anda, Anda akan melihat barang-barang yang Anda miliki, well, trash. Klik kanan atau Klik kontrol pada file apa pun (atau tahan Command untuk mengklik dan memilih beberapa item, lalu klik Kontrol), dan Anda akan melihat opsi Put Back. Satu-satunya masalah adalah itu memungkinkan kita melakukannya hanya untuk satu item pada saat itu.

Larutan

  1. Mulailah dengan mengkloning repositori ke mesin lokal Anda sehingga Anda dapat mulai menggunakan solusi kami;

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

    cd sampah kembali

  2. Jalankan AppleScript di komputer itu, melalui perintah osascript;

    skrip osascript / trash-back.scpt

Kesimpulan

Menjalankan AppleScript sangat meningkatkan apa yang dapat Anda lakukan dari jarak jauh dari baris perintah, dan memungkinkan banyak trik keren yang sulit dilakukan sebaliknya. Meskipun Anda dapat menjalankan seluruh skrip di baris perintah, cara menjalankan ini hanya tentang menjalankan juga dapat masuk ke komputer jarak jauh (menggunakan ssh) dan menjalankan AppleScript di komputer itu, melalui osascriptperintah. The osascriptperintah juga dapat menjalankan lain Terbuka Scripting Arsitektur bahasa menggunakan pengubah l.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.