Có cách nào để auto tự động đặt lại mọi thứ trong Trash không?


16

Vợ tôi thấy thư mục 'tất cả tài liệu' trong Finder và quyết định chuyển tất cả vào thùng rác.

Bây giờ chúng tôi có hơn 9.000 tệp trong thùng rác và tôi không thể tìm cách đưa mọi thứ trở lại chỉ bằng một cú nhấp chuột.

Vì một số lý do, nó sẽ chỉ cho phép tôi 'đặt lại' một tệp mỗi lần.

Có cách nào để tự động hóa điều này?


1
Nếu cô ấy kéo thư mục vào thùng rác, sau đó chỉ cần kéo nó trở lại?
henryaaron

Câu trả lời:


9

Nếu "Đặt lại" bị vô hiệu hóa cho lựa chọn nhiều mục, điều đó có nghĩa là (ít nhất) một trong các mục được chọn không có thông tin vị trí ban đầu được lưu trữ trong tệp .DS_Store của thư mục Thùng rác.

Mặc dù nó ít hơn lý tưởng, hãy thử tập con đa lựa chọn các tập tin tìm kiếm nhóm mà bạn có thể "Đặt lại" ồ ạt trước khi phải dùng đến nộp hồ sơ hướng dẫn cho các tập tin còn lại.


1
Tôi dường như không thể "Đặt lại" các tập tin. Tôi có thể chọn một trong hai tệp và tùy chọn để đặt lại ở đó nhưng khi tôi chọn cả "Đặt lại" thì không khả dụng. Vì vậy, tôi không nghĩ rằng bạn có thể "Đặt lại" en masse. Có lẽ với một applescript mặc dù ...
Steve Moser

6
Câu trả lời này không chính xác. Tôi đang ở trạng thái mà bất kỳ tệp riêng lẻ nào cũng có thể là "Đặt lại" nhưng nếu tôi chọn nhiều hơn một tệp thì tôi không thể, điều đó không phù hợp với câu trả lời của bạn.
Tom Swirly

Câu trả lời thực sự không chính xác. Tôi đã bỏ A và tập tin B vào thùng rác của tôi. Chọn riêng chúng cho tôi tùy chọn đặt lại khi đi xe đạp phải, Chọn cả hai và sau đó nhấp chuột phải, tùy chọn Đặt lại sẽ không còn nữa.
Cờ lê

5

Hãy thử chạy một tập lệnh như thế này trong 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

Nếu Finder hiển thị hộp thoại mật khẩu khi bạn cố gắng đặt lại một số mục, hãy thử thêm một cái gì đó như thế này vào cuối tell application "System Events"khối:

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

Vì một số lý do, điều này thực sự rất chậm đối với tôi trong khi một người của @ThierryKoblentz nhanh hơn khoảng 50 lần. Tôi đã không khám phá lý do tại sao.
Rory

3

Một AppleScript "Đặt lại tất cả các mục trong Thùng rác" đã hoạt động với tôi:

Mở "AppleScript Editor" và sao chép / dán các dòng bên dưới, sau đó chạy tập lệnh nhiều lần nếu cần.

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
Điều này làm việc cho tôi trên macOS Sierra. FYI: mã khóa 126 lên và mã khóa 51 là backspace. Bạn có thể sửa đổi phím 3 dòng xuống ... phím lên ... thành một : key code 51 using key command down. (Điều này được chuyển thể từ câu trả lời khác tập tin phục hồi máy tính để bàn của tôi muốn mật khẩu hệ thống của tôi, mà sai lầm với kịch bản này, tôi hủy những bằng tay và phục hồi những vài...
Eric Hồ

Đối với tôi trên MacOS Mojave, giải pháp này là một cơn ác mộng. Mỗi mục được đưa trở lại từ thùng rác, đã mở một cửa sổ Finder mới vào thư mục nguồn của mục đó. Sau đó, mã bắt đầu chọn các mục trong cửa sổ Finder hiện tại (một số trong đó là các thư mục có hành động thư mục đính kèm) sau đó được kích hoạt.
wch1zpink

3

Mã AppleScript này hoạt động với tôi bằng cách sử dụng phiên bản macOS Mojave mới nhất.

Mã này sẽ lặp qua từng mục trong thùng rác, đưa từng mục trở lại vị trí ban đầu của chúng.

Nếu bất kỳ thư mục nguồn gốc nào của các tệp trong Thùng rác không còn tồn tại, repeat until trashCount is 0lệnh sẽ thoát khỏi vòng lặp. Mọi tệp còn lại trong Thùng rác sẽ chỉ là các tệp không thể được đặt lại vì lý do này.

CẬP NHẬT

Vì có thể chọn một mục trên máy tính để bàn của bạn trong vòng lặp lặp của quá trình đặt lại các tệp từ thùng rác, mục máy tính đã chọn có thể bị cuốn vào quy trình và được chuyển vào thùng rác. Để tránh kịch bản này, tôi đã thêm mã sẽ khóa các mục Máy tính để bàn hiện đang mở khóa và cũng sẽ mở khóa chúng ở cuối tập lệnh.

Bởi vì tất cả các mục Máy tính để bàn hiện đang bị khóa ... Trong quá trình đặt lại các tệp từ thùng rác, nếu vì lý do nào đó, bạn vô tình chọn một tệp hoặc thư mục trên máy tính để bàn của mình và mã cố gắng xử lý mục máy tính đã chọn đó ... Nó sẽ tạo một cửa sổ hộp thoại đề cập đến mục đó bị khóa và hỏi bạn có muốn tiếp tục gửi nó vào thùng rác không. Khối thông báo sự kiện hệ thống ở cuối tập lệnh sẽ xử lý bất kỳ hộp thoại nào có thể được tạo.

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 tuổi, do đó, mặc dù không thể áp dụng cho vấn đề của OP nữa, tuy nhiên, thật tuyệt khi có một tập lệnh tự động cập nhật xử lý các bản phát hành macOS mở một cửa sổ mới hiển thị tệp đặt lại. Bạn có lẽ nên, như một lưu ý sử dụng, thông báo cho người dùng rằng để sử dụng tính năng này, người ta không được chạm vào máy tính cho đến khi hoàn thành vì bản chất của UI Scripting. Không nhất thiết phải là một thông điệp được trình bày bằng cách chạy tập lệnh mà là một ghi chú trong câu trả lời.
dùng3439894

BTW Tôi sẽ có +1, nhưng lỗi trong vòng lặp lặp lại là không thể chấp nhận được vì nó có thể được mã hóa để xử lý tình huống gây ra nó!
dùng3439894

@ user3439894 Tôi đã cập nhật mã ... +1 của tôi ở đâu? LOL
wch1zpink

1
Xem đó là cách dễ dàng! :) +1
dùng3439894

1

bạn có thể làm nổi bật mọi tệp hoặc ít nhất là thực hiện theo lô tăng dần, sao chép chúng sau đó dán lại chúng tôi tin. Tôi vừa thử nó và nếu bạn nhấp đúp vào thùng rác của mình thì có thể nhấp chuột phải vào các tệp bạn muốn khôi phục, có tùy chọn "đặt lại" chỉ hoạt động theo tệp, như đã nói tôi sẽ tô sáng sau đó nhấn Cc (lệnh c) để sao chép sau đó Cv (lệnh v) để dán lại.


1

Điều này làm việc cho tôi:

  • Tạo một thư mục mới trong Finder, tôi gọi tôi là "tập tin phục hồi"
  • Mở thư mục Thùng rác và chọn một nhóm tệp
  • Sao chép tập tin và dán vào thư mục "tập tin phục hồi".

Nếu bạn cần đặt lại một thư mục lớn hoặc một số lượng lớn các tệp riêng lẻ, hãy sử dụng kỹ thuật này. Nếu bạn chỉ cần 1 hoặc 2 tệp, chỉ cần sử dụng tính năng "đặt lại".


1
Sai - điều này một lần nữa không thực sự "đặt lại" các tệp và không giải quyết được vấn đề, nó chỉ đơn thuần lấy tất cả chúng và ném chúng vào một đống lớn.
Tom Swirly

1

Trước Snow Leopard, OS X không có khả năng khôi phục các tệp về vị trí ban đầu mà chúng đã bị xóa (như có thể được thực hiện trong môi trường Windows với tùy chọn "Khôi phục" trong menu ngữ cảnh cho Thùng rác). Tôi đã vô tình làm điều tương tự như vợ bạn đã làm tại một thời điểm với khoảng 10.000 tệp bị xóa.

Sau khi khám phá tất cả các tùy chọn của mình, tôi đã thực hiện khôi phục hệ thống thông qua Time Machine. Đó là phương pháp phù hợp nhất để đưa các tập tin nói đến vị trí thích hợp của chúng.


2
Chà, như bạn có thể dễ dàng suy ra từ các câu trả lời khác ở đây, có thể đặt lại các tệp / thư mục từ Thùng rác: mở Thùng rác, nhấp chuột phải vào tệp và chọn "Đặt lại".
nohillside

1

Kéo tất cả các tệp từ Thùng rác sang tab Tất cả tệp của tôi trong Finder. Sẽ mất một lúc nếu bạn có nhiều tệp. Chúng tôi đã thử nghiệm trên 10000 tệp. Finder sẽ khôi phục tất cả các tập tin về vị trí ban đầu của nó.


2
Điều này không có gì trên macOS Sierra
Cyril Duchon-Doris

0

Dựa trên một giải pháp gần mà @thierry đã đưa ra ở đây từ Giacomo Balli , chúng tôi đã tạo ra giải pháp này để giúp một số bạn, vì vấn đề vẫn còn. Khi bạn xóa một tệp trong MacOS , các vị trí ban đầu của nó được lưu trữ trong.DsStoretập tin ẩn trong trường hợp bạn muốn khôi phục nó. Các phiên bản gần đây của macOS có khả năng đưa công cụ vào Thùng rác của bạn trở lại nơi xuất phát, phân chia nhỏ gọn và cách này nhanh hơn so với kéo và thả. Vì vậy, như bạn đã biết, nếu bạn nhấp vào biểu tượng thùng rác trong Dock của bạn, bạn sẽ thấy các mục bạn có, tốt, được bỏ vào thùng rác. Nhấp chuột phải hoặc Nhấp chuột phải vào bất kỳ tệp nào (hoặc nhấn giữ Lệnh để nhấp và chọn nhiều mục, sau đó bấm Điều khiển) và bạn sẽ thấy tùy chọn Đặt lại. Vấn đề duy nhất là nó cho phép chúng tôi làm điều đó chỉ cho một mục tại thời điểm đó.

Giải pháp

  1. Bắt đầu bằng cách nhân bản kho lưu trữ vào máy cục bộ của bạn để bạn có thể bắt đầu sử dụng giải pháp của chúng tôi;

    git clone git@github.com: opprDev / thùng rác-back.git

    cd rác trở lại

  2. Chạy AppleScript trên máy tính đó, thông qua lệnh osascript;

    tập lệnh osascript / thùng rác-back.scpt

Kết luận

Chạy AppleScript làm tăng đáng kể những gì bạn có thể làm từ xa từ dòng lệnh và cho phép nhiều thủ thuật hay, khó thực hiện. Mặc dù bạn có thể chạy toàn bộ tập lệnh trong dòng lệnh, cách chạy này chỉ là về việc chạy cũng có thể đăng nhập vào một máy tính từ xa (sử dụng ssh) và chạy AppleScript trên máy tính đó, thông qua osascriptlệnh. Các osascriptlệnh cũng có thể chạy bất kỳ khác mở Scripting Kiến trúc ngôn ngữ sử dụng modifier -l.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.