[ Mac ] サービスを利用してファイルのパスをコピー・文字列置換する

More than 3 years have passed since last update.


技術ブログを書いてる時、ファイルパスを書くこと多くありません?

今回の記事は下記動画のように任意のファイルの置き場所(ファイルパス)を簡単に取得し、かつユーザー名のところを"[ユーザー名]"に置き換えてクリップボードにコピーするという方法についてです。

usage.gif

※ 本記事はOS X10.9.5で書いてます。最新のOSバージョンでは異なる表記もあるかもしれませんが、大体似たような感じかと思います


背景

例えば「VSCodeの設定は下記にあります」みたいな状態です。

/Users/[ユーザー名]/Library/Application Support/Code/User/settings.json

もしくは

~/Library/Application Support/Code/User/settings.json

このファイルパスを記事に書くとき、みなさんどうしてますでしょうか。


直球な方法

例としてデスクトップにあるmjg_sel_solo.pyのファイルパスを書いてみます。

info.png


  1. ファイルを選択する

  2. cmd+iで情報ウィンドウを開く

  3. 場所の部分をドラッグする

  4. cmd+Cでコピー

  5. テキストエディタに貼り付けをする


  6. /Users/xxxxxx/Desktopxxxxxxの部分を[ユーザー名]に書き換える(xxxxxxには実際のユーザー名が入っている)

  7. 最後に/mjg_sel_solo.pyを書き加える

めんどくさい事この上ない


今回ご紹介する方法


  1. ファイルを選択する

  2. 右クリックメニューからcopy_pathを実行(後述しますが、ショートカットでも実行可能です)

  3. 実際のユーザー名を[ユーザー名]に置き換え済みのファイルパスがすでにクリップボードにはいっているので、貼り付けするだけ

かんたん!


サービスの作成方法


Automatorの起動

Spotlightで「Auto」と入力し、Automatorを起動。新規書類ボタンを押す。

run_automator.jpg


新規サービスの作成

サービスをクリックし、選択ボタンを押す。

new_service.jpg


アクションの追加「クリップボードにコピー」

アクション検索窓に「クリップ」と入力し、「クリップボードにコピー」をワークフローパネルにドラッグ・アンド・ドロップする。

clip01.jpg


サービスの保存

名前をつけて保存しておく。保存はcmd+Sで。

save.jpg


「クリップボードにコピー」の設定

クリップボードにコピーする対象をファイルにするため、設定を変更する。

- "サービス"は、次の項目を受け取る:ファイルまたはフォルダ

- 検索対象:Finder

clip_setting.jpg

ここまでの作業でファイルのパスをコピーするだけのサービス(ユーザー名の置換なし)は作成完了です。


アクションの追加「シェルスクリプトを実行」

アクション検索窓に「シェル」と入力し、「シェルスクリプトを実行」をワークフローパネルにドラッグ・アンド・ドロップする。

shell.jpg


「シェルスクリプトを実行」の設定


  • シェル:/bin/bash

  • 入力の引き渡し方法:引数として

  • スクリプトは下記の通り(xxxxxxは自分のユーザー名を入れてください)


copy_path.workflow

for f in "$@"

do
echo $f | sed -e "s/xxxxxx/[ユーザー名]/g"
done

shell_setting.jpg

このアクションで文字列の置き換えを実行しています。

こちらにホームディレクトリからのパスへ置換する方法を追記しました。


アクションの追加「クリップボードにコピー」

アクション検索窓に「クリップ」と入力し、「クリップボードにコピー」をワークフローパネルにドラッグ・アンド・ドロップする。(シェルスクリプトで置換した文字列を、再度クリップボードに保持する)

clip02.jpg

これでサービスの作成は完了です!


ショートカットの設定方法

せっかく作った機能なので、右クリックメニューからだけではなくショートカットで実行できるようにしておきましょう。


キーボードウィンドウの表示


  1. システム環境設定を起動する

  2. キーボードをクリック

  3. ショートカットタブをクリック

  4. サービスをクリック

  5. ファイルとフォルダ内にcopy_pathがあるので「ショートカット追加ボタン」を押す

key_setting01.jpg


任意のショートカットを押して設定

ここではcmd+option+Cにしておきました。

key_setting02.jpg


使う

任意のファイルを選択してcmd+option+Cを押すだけで、文字列置換後のファイルパスがコピーできました!

地味に便利かと思うのでご興味がある方は使ってみてはいかがでしょう。


追記-ホームディレクトリからのパスとしてコピー

クリップボードにコピーされる文字列ですが、ホームディレクトリからのパスとしてコピーした方が良いんじゃない?というご意見を頂いたので、そのやり方も追記しておきます。

(例) デスクトップのmjg_sel_solo.pyファイル

~/Desktop/mjg_sel_solo.py


「シェルスクリプトを実行」の設定2

スクリプトは下記の通り(xxxxxxは自分のユーザー名を入れてください)


copy_path.workflow

for f in "$@"

do
echo $f | sed -e "s/\/Users\/xxxxxx/~/g"
done

これでホームディレクトリからのパスとしてコピーできますね。