現行の Fedora では
gio trash ファイル名
コマンドでゴミ箱にファイルを捨てることができる。
macOS でも jxa で同じことがしたい。
javascript – Send to Trash with JXA on Mac OS – Stack Overflow
あっさり見つかったけどこれ Finder.Item である必要があるヤン。
そうじゃなくて普通のコマンドとして使いたいんだよ。
[macOS] コマンドラインからゴミ箱へ削除するスクリプトを書きました – Qiita
同じことをやりたい人って結構いるみたい。
これを JXA に変換しようと思ったけどよく解らない。
Objective-c からの変換のほうが簡単って変な感じだお。
(旧) Cocoaの日々: NSWorkspace – recycleURLs:completionHandler:(ゴミ箱に捨てる/復活させる)
うん、こっちなら結構簡単に JXA 変換できそう。
と思って書いてみたけど完走しても動かなかった。
コマンドラインアプリケーションでのNSWorkspaceの利用 – XCode(4.6)でコ… – Yahoo!知恵袋
NSWorkspace は GUI でないといけないのかな。
多分ハンドラがあるので mainloop が必要なだけだと思うけど。
ならば NSApplication を使えばイケそうだ、やってみよう。
#!/usr/bin/osascript -l JavaScript ObjC.import("Cocoa"); function run(argv) { let urls = []; for (path of argv) { urls.push($.NSURL.alloc.initFileURLWithPath($(path))); } $.NSWorkspace.sharedWorkspace.recycleURLsCompletionHandler($(urls), (newURLs, error)=> { console.log("done"); $.NSApp.terminate(0); } ); $.NSApplication.sharedApplication; $.NSApp.run; }
trash
これを trash という拡張子の無いファイル名でパスの通った所に置いて。
拡張子を外すので -l オプションを忘れずに。
trash filename ...
ワイルドカードも使えるし日本語ファイル名もバッチリ(死語)だぜ!
こんな短いコードでできたお、変換だらけなのは JXA の宿命。