乾脆把文件~/.Trash/
將無法正常工作,因爲如果一個外部驅動器上的文件操作系統,它將文件移動到主系統驅動..OS X:確定回收站位置給定路徑
而且,還有其他條件,如外部驅動器上的文件被移動到/Volumes/.Trash/501/
(或當前用戶的ID是什麼)
給定文件或文件夾路徑,確定垃圾文件夾的正確方法是什麼?我想這種語言是非常不相關的,但我打算使用Python
乾脆把文件~/.Trash/
將無法正常工作,因爲如果一個外部驅動器上的文件操作系統,它將文件移動到主系統驅動..OS X:確定回收站位置給定路徑
而且,還有其他條件,如外部驅動器上的文件被移動到/Volumes/.Trash/501/
(或當前用戶的ID是什麼)
給定文件或文件夾路徑,確定垃圾文件夾的正確方法是什麼?我想這種語言是非常不相關的,但我打算使用Python
或者,如果您使用的是OS X 10.5,則可以使用Scripting Bridge通過Finder刪除文件。我已經通過RubyCocoa在Ruby代碼here中完成了這項工作。它的要點是:
url = NSURL.fileURLWithPath(path)
finder = SBApplication.applicationWithBundleIdentifier("com.apple.Finder")
item = finder.items.objectAtLocation(url)
item.delete
你可以很容易地做到與PyObjC類似的東西。
文件管理器API有一對稱爲FSMoveObjectToTrashAsync和FSPathMoveObjectToTrashSync的函數。
不知道這是否暴露給Python。
從http://www.cocoadev.com/index.pl?MoveToTrash基於代碼,我想出了以下內容:
def get_trash_path(input_file):
path, file = os.path.split(input_file)
if path.startswith("/Volumes/"):
# /Volumes/driveName/.Trashes/<uid>
s = path.split(os.path.sep)
# s[2] is drive name ([0] is empty, [1] is Volumes)
trash_path = os.path.join("/Volumes", s[2], ".Trashes", str(os.getuid()))
if not os.path.isdir(trash_path):
raise IOError("Volume appears to be a network drive (%s could not be found)" % (trash_path))
else:
trash_path = os.path.join(os.getenv("HOME"), ".Trash")
return trash_path
相當基礎,而且也必須被seperatly完成,特別是檢查,如果文件名中的垃圾已經存在(有幾件事避免覆蓋)和實際移動到垃圾,但它似乎涵蓋了大部分的東西(內部,外部和網絡驅動器)
更新:我想垃圾在Python腳本文件,所以我重新實現戴夫Dribin的Python解決方案:
from AppKit import NSURL
from ScriptingBridge import SBApplication
def trashPath(path):
"""Trashes a path using the Finder, via OS X's Scripting Bridge.
"""
targetfile = NSURL.fileURLWithPath_(path)
finder = SBApplication.applicationWithBundleIdentifier_("com.apple.Finder")
items = finder.items().objectAtLocation_(targetfile)
items.delete()
用法很簡單:
trashPath("/tmp/examplefile")
Python重新實現對我來說不起作用,在其上運行trashPath後,這些文件仍然存在。阿什利克拉克提出的解決方案確實奏效。 – 2011-03-05 17:32:51
一種更好的方式爲NSWorkspaceRecycleOperation,這是你可以用-[NSWorkspace performFileOperation:source:destination:files:tag:]使用的操作之一。這個常量的名字是可可NeXT遺產的另一個神器;其功能是將物品移到垃圾箱。
由於它是Cocoa的一部分,它應該可用於Python和Ruby。
另一位在紅寶石:
Appscript.app('Finder').items[MacTypes::Alias.path(path)].delete
您需要rb-appscript寶石,你可以讀到它here
在Python,而無需使用腳本橋,你可以這樣做:
from AppKit import NSWorkspace, NSWorkspaceRecycleOperation
source = "path holding files"
files = ["file1", "file2"]
ws = NSWorkspace.sharedWorkspace()
ws.performFileOperation_source_destination_files_tag_(NSWorkspaceRecycleOperation, source, "", files, None)
或者appscript,我懷疑。 – 2008-10-31 10:30:09