LoginSignup
2
4

More than 5 years have passed since last update.

Linux形式のパスをWindows形式のパスに変換してクリップボードにコピーする方法

Last updated at Posted at 2017-08-31

背景

ghqpecoを組み合わせて使うようになって、Windowsエクスプローラーのマウス操作が億劫になりました。とは言え、まだまだシェル力が足りないのでエクスプローラーを併用するのですが、ディレクトリのパス形式がLinuxとWindowsで違うために目的のディレクトリをすぐ開けなくてちょっと困っていました。(´・ω・`)

使用環境

  • Windows 10
    • bash(Git for Windows 同梱のもの)

やったこと

そこで、以下のようなことをやってみました。

  • bashのカレントディレクトリパスをWindows形式に変換
  • Windows標準のクリップボードにコピーするツールclipに上記パス情報を渡す

あとは、エクスプローラーや好みのファイラーにパスを貼り付けて移動できます。

bashのカレントディレクトリパスをWindows形式に変換

cygpathでやってみた

# 日本語を含むパスで文字化けします
$ cygpath -w `pwd` | tr -d '\n' | clip

はじめは、上記のようにcygpathツール(Git for Windowsに同梱)を使った方法を試したのですが、残念ながらclipツールがShift-JIS形式の文字列しか扱えないため日本語を含むパスで文字化けしてしまいます。それじゃあパイプのどこかでiconv使って文字コードをUTF-8からShift-JISに変換してみよう!と思ってやってみたのですが以下のようになりました。

  • cygpathで変換したWindows形式のパスに対してiconvで変換を試みたが、「:」や「\」が含まれていて変換できない
  • iconvで変換した文字列をcygpathに渡してみたが、なんだか化けた文字列が返ってきた

素直にsedに入門した

はい、素直に正規表現使って変換することにしました。本当にすみませんでした(´・ω・`)

pwd | tr -d '\n' | iconv -f UTF-8 -t SJIS | sed -e 's/\//\\/g' -e 's/\(^\\.\)/\1:/' -e 's/\(^\\\)//' | clip

きっと半年後ぐらいに自分で見直して、「いったいこれは何をやっているんだ・・・!( ・`ω・´)」ってなると思うので簡単に処理をメモします。(ここは本当に自分用です。低レベルです。すみません、すみません。。)

  • pwdでカレントディレクトリ(Linux形式)を取得
  • trで末尾の改行コード除去
  • iconvUTF-8からShift-JISに文字コード変換(後述のclipツールに渡すための準備)
  • sed/\に置換したり、冒頭の\(任意の文字)の後に:入れたり、冒頭の\(任意の文字)\消したり
  • clipツールに渡してクリップボードへ

sedさんは本当に素晴らしいですね。

参考

とても助けていただいた記事の皆様です。ありがとうございますm(_ _)m

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4