rcmdnk's blog

激安GDスタイル/ジヨン/CAP/GET OUT/帽子キャップ/メンズ/レディース/キャップ/帽子/getout [GD/G-Dragon/Bigbang]BIGBANG/ビッグバン/GETOUT/ヒップホップ/ダンス/ニューエラスタイル

Macでフォルダの中身をその場で一つ上のフォルダに取り出したい時に 右クリックから一発で出来る様なサービスを Automatorを使って作ってみました。

やりたいこと

例えば沢山のフォルダに分かれてるファイルを 一つのフォルダにまとめたいとき、 一つ一つ移動させたりする必要があります。

また、Zip等に圧縮されたファイルを展開すると 余計に一つフォルダが出来て中身を直接その場に置きたいこととかがあります。

XtraFinderを を使っていればGUIでもカット&ペースト出来たりシますが、 そうでないと移動させるには2つFinderを立ち上げてドラッグしたり 結構面倒。

/blog/2014/05/19/computer-mac-finder/#xtrafinder/

そういった時にフォルダを選択してすぐに中身を取り出せたら楽だな、と。

そこで、Automatorを使うと簡単に右クリックから実行できるサービスを作れるので それを使ってみよう、と。

フォルダ情報を受け取ってそれをシェルスクリプトの中で使って 色々操作することも出来るので、 これを使って右クリックから一発でフォルダの中身を取り出すサービスを作ってみます。

Automatorからサービスを作る

まずはAutomatorを立ち上げてサービスを選択して新しいサービスを作ります。

automatorservice

作成画面に入ったら、まず、右上にある "サービス"は次の項目を受け取るフォルダを選択します。

次に、左のコラムでアクションを選択して、 ユーティリティの中にあるシェルスクリプトを実行 をダブルクリックするかドラックして右の領域に持ってきて ワークフローに入れます。

入れたらシェルスクリプトを実行の右上にある 入力の引き渡し方法引数としてに変更します。

そうすると以下の様なスクリプトが自動で出てくると思います。

シェルは今使ってるデフォルトのシェルが出ていると思います。 Homebrewとかでインストールしている /usr/local/bin/bash とかにしておくと、これを削除した時に使えなくなるので、 デフォルトで入ってる/usr/bashとかにしておいた方が良いと思います。

initialize

取り敢えずここでテストして見るために適当なファイルを持ったフォルダを作って みます。 フォルダで新規フォルダとかを使って適当に作るかコマンドラインから

$ mkdir -p /tmp/a
$ touch /tmp/a/a1.txt
$ touch /tmp/a/a2.txt
$ mkdir -p /tmp/b
$ touch /tmp/b/b1.txt
$ touch /tmp/b/b2.txt

などとしておきます。

この/tmpフォルダを開いてaフォルダを Automatorの シェルスクリプトを実行の上にドラッグします。

addfinder

これで シェルスクリプトを実行/tmp/aが渡る様になります。

右上の実行をしてシェルスクリプトを実行の下にある結果を 押して開いてみると/private/tmp/aと表示されてるはずです。 (最近のOS Xでは/tmp//private/tmp/へのシンボリックリンクになっています。)

もうちょっと見て見るために、スクリプトを

1
2
3
4
5
for f in "$@"
do
  echo "$f"
  ls "$f"
done

こんな感じにしてみます。

実行して結果が

/private/tmp/a
a1.txt
a2.txt

となればOK。

firsttest

ここまで来たら実際にフォルダの中身を取り出すスクリプトにしてみます。

1
2
3
4
5
for f in "$@"
do
  parent=$(dirname "$f")
  mv "$f"/* "$parent"/
done

こんな感じ。

これで実行を押してみて、a1.txta2.txt/tmp/に出てきていて/tmp/aから無くなってれば成功です。

上手く行ったら フォルダをドラッグして作った 指定されたFinder項目を取得を右上のバツじるしを押して削除。

シェルスクリプトを実行だけの状態にして メニューバーのファイルから保存を選択して get_outとか適当な名前を付けて保存します。

getout

保存されたサービスは通常

/Users/user/Library/Services/get_out.workflow

というフォルダに保存されていますので、次に変更したい時には これを選択して変更します。

サービスを保存したら 適当なフォルダを右クリックして一番下の方にあるサービスを選択すると get_outという項目が出てくるはずです。

getoutservice

これを最初に作った/tmp/a/tmp/bで試してみます。

a1.txta2.txtを一度/tmp/aに戻してから、 a/b/を同時に選択して、 右クリックしてget_outを実行し、 a1.txta2.txtb1.txtb2.txt が全てa/b/のあるフォルダに出てくれば成功です。

success

ショートカットに割り当てる

また、サービスは、環境設定のキーボードにあるショートカット から適当なキーをサービスに指定することが出来ます。

例えば上のget_outG に設定すれば フォルダを選択してG を押すだけで中身を取り出すことが出来ます。

shortcut

まとめ

Automatorのサービスでシェルスクリプトを使うことで 簡単に強力な操作をフォルダ等に対して行うことが可能です。

上のサービスで、中身を残したままコピーしたいだけならcpを使えば良いし、 中身を特定のフォルダに移したいならそのフォルダをmvで指定してあげる ことも出来ます。

同様にファイルをインプットに使って色々と操作を行うことも可能です。

ショートカットも組み合わせるとかなり便利なので、 普段、Finder上でフォルダやファイルに対して 何度も繰り返してる様な作業がある場合には Automatorを試してみるとかなり快適になる事があるはずです。

Sponsored Links
Sponsored Links

« ここ最近ブログでよくコピーされる物 VimのNeoBundleのアップデートで出た'Unknown function'のエラーを直す(NeoBundleLazyをちゃんと考えて使う) »

}