~/.Trash/
ファイルが外部ドライブにある場合と同様に、単にファイルを移動するだけでは機能しません。ファイルはメイン システム ドライブに移動されます。
/Volumes/.Trash/501/
また、外部ドライブ上のファイルの移動先(または現在のユーザーの ID が何であれ)など、他の条件もあります。
ファイルまたはフォルダーのパスを指定して、ごみ箱フォルダーを特定する正しい方法はどれですか? 言語はかなり無関係だと思いますが、Pythonを使用するつもりです
~/.Trash/
ファイルが外部ドライブにある場合と同様に、単にファイルを移動するだけでは機能しません。ファイルはメイン システム ドライブに移動されます。
/Volumes/.Trash/501/
また、外部ドライブ上のファイルの移動先(または現在のユーザーの ID が何であれ)など、他の条件もあります。
ファイルまたはフォルダーのパスを指定して、ごみ箱フォルダーを特定する正しい方法はどれですか? 言語はかなり無関係だと思いますが、Pythonを使用するつもりです
または、OS X 10.5を使用している場合は、ScriptingBridgeを使用してFinderからファイルを削除できます。これは、RubyCocoaを介してRubyコードで行いました。その要点は次のとおりです。
url = NSURL.fileURLWithPath(path)
finder = SBApplication.applicationWithBundleIdentifier("com.apple.Finder")
item = finder.items.objectAtLocation(url)
item.delete
PyObjCと同じようなことを簡単に行うことができます。
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
かなり基本的で、個別に実行する必要があることがいくつかあります。特に、ファイル名が既にゴミ箱に存在するかどうかを確認すること (上書きを避けるため) と、実際にゴミ箱に移動することですが、ほとんどのもの (内部、外部、およびネットワーク ドライブ) をカバーしているようです。 )
更新: Python スクリプトでファイルを破棄したかったので、Dave 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では、スクリプトブリッジを使用せずに、次のことができます。
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)
より良い方法は、 -[NSWorkspace performFileOperation:source:destination:files:tag:]で使用できる操作の 1 つであるNSWorkspaceRecycleOperationです。定数の名前は、Cocoa の NeXT 遺産のもう 1 つの成果物です。その機能は、アイテムをゴミ箱に移動することです。
これは Cocoa の一部であるため、Python と Ruby の両方で使用できるはずです。
File Manager API には、FSMoveObjectToTrashAsync と FSPathMoveObjectToTrashSync という関数のペアがあります。
それがPythonに公開されているかどうかはわかりません。
ルビーの別のもの:
Appscript.app('Finder').items[MacTypes::Alias.path(path)].delete
rb-appscript gemが必要です。これについては、こちらを参照してください。