ข้ามแพลตฟอร์มไปที่ถังขยะ
มีวิธีย้ายไฟล์ไปที่ถังขยะข้ามแพลตฟอร์มหรือไม่? file deleteลบไฟล์ทั้งหมดและไม่สามารถยกเลิกได้บน unixen แม้แต่บน Linux เพียงอย่างเดียวก็ไม่สามารถค้นหาไดเร็กทอรีถังขยะได้โดยตรงเพราะมักขึ้นอยู่กับตัวจัดการไฟล์
ฉันเคยทำ:
exec gio trash $file
ปัญหาคือสิ่งนี้ใช้ได้กับ Gnome เท่านั้นดังนั้นแม้ว่าบน Linux จะไม่ข้ามแพลตฟอร์ม
และเนื่องจากฉันไม่มีเครื่อง Windows การหาวิธีการทำงานของถังขยะ / ถังรีไซเคิลใน Windows จึงทำได้ยากยิ่งขึ้น
คำตอบ
ข้อกำหนดถังขยะ 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คำสั่ง
นี่คือวิธีดำเนินการบน 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 เพื่อรีไซเคิลถังหรือถาวร