ข้ามแพลตฟอร์มไปที่ถังขยะ

Oct 25 2020

มีวิธีย้ายไฟล์ไปที่ถังขยะข้ามแพลตฟอร์มหรือไม่? file deleteลบไฟล์ทั้งหมดและไม่สามารถยกเลิกได้บน unixen แม้แต่บน Linux เพียงอย่างเดียวก็ไม่สามารถค้นหาไดเร็กทอรีถังขยะได้โดยตรงเพราะมักขึ้นอยู่กับตัวจัดการไฟล์

ฉันเคยทำ:

exec gio trash $file

ปัญหาคือสิ่งนี้ใช้ได้กับ Gnome เท่านั้นดังนั้นแม้ว่าบน Linux จะไม่ข้ามแพลตฟอร์ม

และเนื่องจากฉันไม่มีเครื่อง Windows การหาวิธีการทำงานของถังขยะ / ถังรีไซเคิลใน Windows จึงทำได้ยากยิ่งขึ้น

คำตอบ

2 SchelteBron Oct 25 2020 at 16:18

ข้อกำหนดถังขยะ FreeDesktop.orgพูดว่า:

สำหรับผู้ใช้ทุกคนต้องมีไดเร็กทอรี "ถังขยะภายในบ้าน" ชื่อและที่ตั้งคือ$XDG_DATA_HOME/Trash; $XDG_DATA_HOME เป็นไดเร็กทอรีฐานสำหรับข้อมูลเฉพาะผู้ใช้ตามที่กำหนดไว้ใน Desktop Base Directory Specification

ถ้า $XDG_DATA_HOME is unset or empty, it defaults to $HOME / .local / share.

อย่างไรก็ตามคุณไม่สามารถย้ายไฟล์เข้าและออกจาก ~ / .local / share / Trash ได้ มีไฟล์ข้อมูลเมตาบางไฟล์ที่เกี่ยวข้องซึ่งจัดเก็บตำแหน่งดั้งเดิมและการประทับเวลา ไฟล์ข้อมูลเมตาเหล่านี้เป็นข้อความธรรมดาดังนั้นจึงสามารถจัดการได้ง่ายใน Tcl

ดูเหมือนว่ามันสามารถนำไปใช้ในโมดูล Tcl ได้อย่างง่ายดาย แต่ถ้ามีโมดูลดังกล่าวอยู่แล้วฉันก็ไม่รู้ อาจเป็นโครงการที่ดีสำหรับคนที่เรียน Tcl

ข้อมูลเพิ่มเติม:

ตามปกติTWAPIเพื่อช่วยเหลือ Windows twapi_shellแพคเกจมีrecycle_fileคำสั่ง

2 DonalFellows Oct 25 2020 at 22:25

นี่คือวิธีดำเนินการบน macOS ต้องใช้แพ็คเกจส่วนขยายTclapplescript :

package require Tclapplescript

proc trash args {
    set TRASH_CMD {
        tell application "Finder" to delete POSIX file "%s"
    }
    foreach file $args { set fullFilename [file normalize $file]
        set quoted [string map {\\ \\\\ \\" \\\\"} $fullFilename] AppleScript execute [format $TRASH_CMD $quoted]
    }
}

ใน macOS เวอร์ชันล่าสุดคุณจะต้องให้สิทธิ์ที่เหมาะสมในขณะรันไทม์เพื่อให้สามารถใช้งานได้ (หรืออย่างน้อยฉันก็ต้องทำเมื่อทดสอบ)

ดูสิ่งนี้ด้วย:

  • https://apple.stackexchange.com/questions/50844/how-to-move-files-to-trash-from-command-line
  • ลบไฟล์ด้วย AppleScript เพื่อรีไซเคิลถังหรือถาวร