それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rmの代わりにゴミ箱に捨てるOSXコマンド

rm でヒヤヒヤするので、ゴミ箱に捨てるコマンドをつくってみた

ゴミ箱に捨てるコマンド

//
//  main.m
//  rm-trash
//
//  Created by takuya  on 2013/08/30.
//  Copyright (c) 2013年 takuya . All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool {

        NSFileManager *file_manager = [NSFileManager defaultManager];

        if (argc == 1) {
            fprintf(stderr, "ファイル指定してね.\n");
            return 1;
        }

        for (int i=1; i < argc; i++) {
            const char* file_to_trash = argv[i];
            NSURL *url = [NSURL fileURLWithPath:[NSString stringWithUTF8String:file_to_trash]];
            NSURL *trashed;
            NSError *error;
            // ファイルが存在するか?
            if ([file_manager fileExistsAtPath:[url path ]]) { // yes
                [file_manager trashItemAtURL:url resultingItemURL:&trashed error:&error];
                fprintf(stdout, "ゴミ箱に捨てたよ %s to %s\n", [[url path] UTF8String], [[trashed path] UTF8String]);
            } else {
                //ファイルが存在しないと何もしない
            }
        }
    }
    return 0;
}


単純に、~/.trashにmoveすると、元に戻すが出来ないらしいので、ちゃんとFoundationを使う必要があるってことが驚きだった。なるほど

rm の代替に使うには、rm のオプションをそのまま無視してくれないと困る。rm にオプションをつけて使うのが基本なので、オプションつけてもエラーにならないようにしたかった。

brewのrm-trashだと、

alias rm="rm-trash"
rm -rf hoge

でオプションがエラーになっちゃって違和感がするのでした。