มีวิธีใดบ้างที่จะ "คืนค่า" ทุกอย่างในถังขยะโดยอัตโนมัติ


16

ภรรยาของฉันเห็นโฟลเดอร์ 'เอกสารทั้งหมด' ใน Finder และตัดสินใจที่จะย้ายมันทั้งหมดไปที่ถังขยะ

ตอนนี้เรามีไฟล์มากกว่า 9,000 ไฟล์ในถังขยะและฉันไม่สามารถหาวิธีนำทุกอย่างกลับมาได้ด้วยคลิกเดียว

ด้วยเหตุผลบางอย่างมันจะให้ฉัน 'ถอยกลับ' ทีละไฟล์

มีวิธีใดที่จะทำให้สิ่งนี้เป็นแบบอัตโนมัติหรือไม่?


1
หากเธอลากโฟลเดอร์ไปที่ถังขยะแล้วเพียงแค่ลากกลับออกมา?
henryaaron

คำตอบ:


9

หากปิดใช้งาน "การย้อนกลับ" สำหรับการเลือกหลายรายการหมายความว่า (อย่างน้อย) รายการใดรายการหนึ่งที่เลือกไม่มีข้อมูลตำแหน่งเดิมที่เก็บอยู่ในไฟล์. DS_Store ของไดเรกทอรีถังขยะ

แม้ว่าจะน้อยกว่าอุดมคติ แต่ลองเลือกหลาย ๆ ชุดย่อยของไฟล์ที่ค้นหากลุ่มที่คุณสามารถ "ใส่กลับ" en masseก่อนที่จะหันไปใช้การจัดเก็บด้วยตนเองสำหรับไฟล์ที่เหลือ


1
ฉันดูเหมือนจะไม่สามารถ "ย้อนกลับ" ไฟล์ได้มากมาย ฉันสามารถเลือกไฟล์และตัวเลือกที่จะนำกลับมาอยู่ที่นั่น แต่เมื่อฉันเลือกทั้ง "ใส่กลับ" ไม่สามารถใช้ได้ ดังนั้นฉันไม่คิดว่าคุณสามารถ "ถอยกลับ" en masse บางทีด้วย applescript ...
Steve Moser

6
คำตอบนี้ไม่ถูกต้อง ฉันอยู่ในสถานะที่ไฟล์ใด ๆ สามารถ "ย้อนกลับ" แต่ถ้าฉันเลือกมากกว่าหนึ่งไฟล์ฉันไม่สามารถทำได้ซึ่งไม่สอดคล้องกับคำตอบของคุณ
Tom Swirly

คำตอบนั้นไม่ถูกต้องแน่นอน ฉันมีไฟล์ A และไฟล์ B ไว้ในถังขยะแล้ว การเลือกพวกเขาแต่ละครั้งจะทำให้ฉันมีตัวเลือกการวางกลับเมื่อ cliking ขวาการเลือกพวกเขาทั้งสองและจากนั้นคลิกขวาตัวเลือกใส่กลับจะหายไป
ประแจ

5

ลองเรียกใช้สคริปต์เช่นนี้ใน 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

หาก Finder แสดงกล่องโต้ตอบรหัสผ่านเมื่อคุณพยายามนำบางรายการกลับมาลองเพิ่มสิ่งนี้ในส่วนท้ายของtell application "System Events"บล็อก:

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

ด้วยเหตุผลบางอย่างสิ่งนี้วิ่งช้ามากสำหรับฉันในขณะที่ @thierryKoblentz เร็วกว่าประมาณ 50 เท่า ฉันไม่ได้สำรวจว่าทำไม
โรรี่

3

AppleScript ที่"นำ [s] กลับรายการทั้งหมดในถังขยะ"ได้ผลสำหรับฉัน:

เปิด "AppleScript Editor" และคัดลอก / วางบรรทัดด้านล่างจากนั้นเรียกใช้สคริปต์ได้หลายครั้งตามต้องการ

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
สิ่งนี้ใช้ได้กับฉันใน macOS Sierra FYI: รหัสคีย์ 126 อัพและรหัสคีย์ 51 คือ backspace คุณสามารถปรับเปลี่ยน 3 สายลงที่สำคัญ ... คีย์ ... key code 51 using key command downเพื่อหนึ่ง: (นี่ดัดแปลงมาจากคำตอบอื่นไฟล์ที่กู้คืนไปยังเดสก์ท็อปของฉันต้องการรหัสผ่านระบบของฉันซึ่งยุ่งกับสคริปต์นี้ฉันยกเลิกและคืนค่าเหล่านั้นด้วยตนเอง
Eric Hu

สำหรับฉันใน MacOS Mojave วิธีนี้เป็นฝันร้าย ทุกรายการที่ถูกนำกลับมาจากถังขยะจะเปิดหน้าต่าง Finder ใหม่ไปยังโฟลเดอร์ต้นทางของรายการนั้น จากนั้นรหัสก็เริ่มเลือกรายการในหน้าต่าง Finder ปัจจุบัน (บางรายการเป็นโฟลเดอร์ที่มีการดำเนินการกับโฟลเดอร์ที่แนบมา) ซึ่งจะถูกทริกเกอร์
wch1zpink

3

รหัส AppleScript นี้ใช้ได้กับฉันโดยใช้ macOS Mojave เวอร์ชันล่าสุด

รหัสนี้จะวนซ้ำทุกรายการในถังขยะโดยวางแต่ละรายการกลับไปที่ตำแหน่งเดิม

หากโฟลเดอร์ต้นฉบับดั้งเดิมของไฟล์ในถังขยะไม่มีอยู่อีกต่อไปrepeat until trashCount is 0คำสั่งจะออกจากลูป ไฟล์ที่เหลืออยู่ในถังขยะจะเป็นไฟล์ที่ไม่สามารถนำกลับมาได้เนื่องจากเหตุผลนี้

UPDATE

เนื่องจากเป็นไปได้ที่จะเลือกรายการบนเดสก์ท็อปของคุณในระหว่างวนซ้ำของกระบวนการนำไฟล์กลับมาจากถังขยะรายการเดสก์ท็อปที่เลือกสามารถติดตามในกระบวนการและย้ายไปที่ถังขยะ เพื่อหลีกเลี่ยงสถานการณ์นี้ฉันได้เพิ่มรหัสซึ่งจะล็อครายการเดสก์ท็อปที่ถูกปลดล็อคในปัจจุบันและจะปลดล็อคพวกเขาในตอนท้ายของสคริปต์

เนื่องจากรายการเดสก์ท็อปทั้งหมดถูกล็อค ... ในระหว่างขั้นตอนการนำไฟล์กลับมาจากถังขยะหากด้วยเหตุผลบางประการคุณบังเอิญเลือกไฟล์หรือโฟลเดอร์บนเดสก์ท็อปของคุณและรหัสพยายามประมวลผลรายการเดสก์ท็อปที่เลือก ... สร้างหน้าต่างข้อความที่กล่าวถึงรายการที่ถูกล็อคและถามว่าคุณต้องการส่งต่อไปยังถังขยะหรือไม่ เหตุการณ์ของระบบบอกบล็อกต่อท้ายสคริปต์จะจัดการกล่องโต้ตอบใด ๆ ที่อาจถูกสร้างขึ้น

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 ปีดังนั้นในขณะที่ไม่สามารถใช้กับปัญหาของ OP ได้อีกต่อไป แต่ก็เป็นเรื่องดีที่มีสคริปต์อัตโนมัติที่อัปเดตซึ่งจัดการกับการเปิดตัวของ macOS ที่เปิดหน้าต่างใหม่ที่แสดงไฟล์ใส่กลับ คุณควรแจ้งให้ผู้ใช้ทราบว่าในการใช้สิ่งนี้คุณจะต้องไม่สัมผัสคอมพิวเตอร์จนกว่าจะเสร็จสิ้นเนื่องจากลักษณะของ UI Scripting ไม่จำเป็นต้องเป็นข้อความที่นำเสนอโดยการเรียกใช้สคริปต์ แต่เป็นหมายเหตุในคำตอบ
user3439894

BTW ฉันจะได้ +1 แต่ข้อผิดพลาดในการวนซ้ำซ้ำไม่สามารถยอมรับได้เพราะมันอาจถูกเข้ารหัสเพื่อจัดการกับสถานการณ์ที่เป็นสาเหตุ!
user3439894

@ user3439894 ฉันอัปเดตรหัส ... +1 ของฉันอยู่ที่ไหน LOL
wch1zpink

1
ดูว่าง่ายแค่ไหน! :) +1
user3439894

1

คุณควรจะสามารถเน้นไฟล์ทุกไฟล์หรืออย่างน้อยก็ในรูปแบบที่เพิ่มขึ้นคัดลอกไฟล์เหล่านั้นจากนั้นวางไฟล์เหล่านั้นอีกครั้งที่ฉันเชื่อ ฉันเพิ่งลองและถ้าคุณดับเบิลคลิกถังขยะของคุณสามารถคลิกขวาไฟล์ที่คุณต้องการคืนค่ามีตัวเลือก "ใส่กลับ" ซึ่งใช้งานได้เฉพาะไฟล์ตามที่กล่าวว่าฉันจะเน้นจากนั้นกด Cc (คำสั่ง c) เพื่อคัดลอก จากนั้น Cv (คำสั่ง v) เพื่อวางกลับ


1

สิ่งนี้ใช้ได้กับฉัน:

  • สร้างโฟลเดอร์ใหม่ใน Finder ฉันเรียกฉันว่า "กู้คืนไฟล์"
  • เปิดโฟลเดอร์ถังขยะและเลือกกลุ่มของไฟล์
  • คัดลอกไฟล์และวางลงในโฟลเดอร์ "กู้คืนไฟล์"

หากคุณต้องการนำโฟลเดอร์ขนาดใหญ่กลับมาหรือใช้ไฟล์จำนวนมากให้ใช้เทคนิคนี้ หากคุณต้องการไฟล์ 1 หรือ 2 ไฟล์เพียงใช้ฟีเจอร์ "put back"


1
ผิด - นี่เป็นอีกครั้งที่ไม่ได้ "คืน" ไฟล์และไม่ได้แก้ปัญหามันจะพาพวกเขาทั้งหมดไปทิ้งในกองใหญ่กองเดียว
Tom Swirly

1

ก่อนที่จะมี Snow Leopard OS X ไม่มีความสามารถในการกู้คืนไฟล์ไปยังตำแหน่งดั้งเดิมที่ถูกลบไปแล้ว (สามารถทำได้ในสภาพแวดล้อม Windows ด้วยตัวเลือก "กู้คืน" ในเมนูบริบทสำหรับถังรีไซเคิล) ฉันทำสิ่งเดียวกับที่ภรรยาของคุณทำโดยบังเอิญโดยมีการลบไฟล์ประมาณ 10,000 ไฟล์

หลังจากสำรวจตัวเลือกทั้งหมดของฉันฉันทำการกู้คืนระบบผ่าน Time Machine มันเป็นวิธีที่สะดวกที่สุดในการกล่าวถึงสถานที่ที่เหมาะสม


2
ในขณะที่คุณสามารถอนุมานจากคำตอบอื่น ๆ ได้อย่างง่ายดายคุณสามารถนำไฟล์ / โฟลเดอร์กลับมาจากถังขยะ: เปิดถังขยะคลิกขวาที่ไฟล์แล้วเลือก "วางกลับ"
nohillside

1

ลากไฟล์ทั้งหมดจากถังขยะไปยังแท็บไฟล์ทั้งหมดของฉันใน Finder จะใช้เวลาสักครู่หากคุณมีไฟล์จำนวนมาก เราทดสอบกับไฟล์มากกว่า 10,000 ไฟล์ Finder จะคืนค่าไฟล์ทั้งหมดไปยังตำแหน่งดั้งเดิม


2
สิ่งนี้ไม่ได้ทำใน macOS Sierra
Cyril Duchon-Doris

0

จากโซลูชันใกล้ที่ @thierry ได้มอบให้ที่นี่จากGiacomo Balliแล้วเราได้สร้างโซลูชันนี้เพื่อช่วยคุณหลายคนเนื่องจากปัญหายังคงอยู่ เมื่อคุณลบไฟล์ใน MacOSตำแหน่งเดิมจะถูกเก็บไว้ใน.DsStoreไฟล์ที่ซ่อนอยู่ในกรณีที่คุณต้องการเรียกคืน MacOS รุ่นล่าสุดมีความสามารถในการใส่สิ่งต่าง ๆ ลงในถังขยะของคุณย้อนกลับมาจากที่มันแตกง่ายและเร็วกว่าการลากและวาง ดังที่คุณทราบหากคุณคลิกที่ไอคอนถังขยะใน Dock ของคุณคุณจะเห็นรายการที่คุณมีอยู่ในถังขยะ คลิกขวาหรือคลิกควบคุมที่ไฟล์ใด ๆ (หรือกด Command ค้างไว้เพื่อคลิกและเลือกหลายรายการจากนั้นคลิก Control-Control) จากนั้นคุณจะเห็นตัวเลือกใส่กลับ ปัญหาเดียวคือมันให้เราทำเพียงหนึ่งรายการในเวลา

วิธีการแก้

  1. เริ่มต้นด้วยการโคลนที่เก็บลงในเครื่องของคุณเพื่อให้คุณอาจเริ่มใช้โซลูชันของเรา

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

    cd trash-back

  2. เรียกใช้AppleScriptบนคอมพิวเตอร์เครื่องนั้นผ่านคำสั่ง osascript

    สคริปต์ JavaScript / trash-back.scpt

สรุปผลการวิจัย

การรันAppleScriptจะเพิ่มสิ่งที่คุณสามารถทำได้จากระยะไกลจากบรรทัดคำสั่งอย่างมากและช่วยให้ลูกเล่นที่เจ๋ง ๆ ที่ยากที่จะทำอย่างอื่น ในขณะที่คุณสามารถเรียกใช้สคริปต์ทั้งหมดในบรรทัดคำสั่งวิธีการทำงานนี้เป็นเพียงเกี่ยวกับการทำงานยังสามารถเข้าสู่ระบบคอมพิวเตอร์ระยะไกล (ใช้ ssh) และเรียกใช้AppleScriptบนคอมพิวเตอร์เครื่องนั้นผ่านosascriptคำสั่ง osascriptคำสั่งยังสามารถทำงานอื่น ๆ ที่เปิด Scripting สถาปัตยกรรมภาษาที่ใช้ปรับปรุง -l

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.