X

「ターミナル」で空白文字を含むディレクトリやファイルを扱うときに便利な小技

「編集」-> 「テキストをエスケープしてペースト」でペーストする文字列の空白文字の前にエスケープ文字を追加

Mac は Unix の端末に当たる「ターミナル.app」があります。Mac の隠れた設定を行ったりできますし、Unix コマンドやシェルに慣れている人にとっては非常に強力なツールです。

「ターミナル」でコマンドを実行するとき、ファイルやディレクトリのパスに空白が含まれていて、その文をそのまま実行すると、空白の直前までを1区切りとして認識してしまい、うまくパスを指定することができない問題があります。

ls で Mac OS X のルートパーティションの配下のファイルを調べたいときを例にあげてみます。

#Macintosh HD の中身を知る(間違い)
ls /Volume/Macintosh HD

しかし、実際に実行してみると、

ls: /Volumes/Macintosh: No such file or directory
ls: HD: No such file or directory

このようなエラーが出てしまい、空白前後で1センテンスと認識してしまうため、コマンドの実行に失敗してしまいます。

 

このようなエラーを防ぐためには、ダブルクオーテーションで囲んで文字列として実行するか、空白の前にエスケープ文字を入れる必要があります。Mac ではエスケープ文字として「」が設定されています。

#ダブルクオーテーションで囲む
ls "/Volumes/Macintosh HD"

#エスケープ文字を入力する
ls /Volumes/Macintosh HD

以下のように期待した結果が表示されます。

MacBook-Pro:~ user$ ls "/Volumes/Macintosh HD"
Applications       Volumes            home               sbin
Library            bin                mach_kernel        tmp
Network            cores              net                usr
System             dev                opt                var
Users              etc                private            ユーザ情報

 

cd や ls などのコマンドを使う場合や、カレントディレクトリが対象ディレクトリに近い場合はその都度ダブルクオーテーションで囲んだり、エスケープ文字を入れたりしても、その負担は少ないです。しかし、階層が深い場合や、find などのコマンドで表示されたパスをコピーして利用したい場合などには、少々面倒臭いです。

そんな時に役立つのが、ターミナル.app に用意されている「テキストをエスケープしてペースト」です。

ターミナル.app がアクティブウィンドウになっている時に、メニューバーの「編集」-> 「テキストをエスケープしてペースト」で実行できます。ショートカットキーは「^⌘V」が割り当てられています。

例を挙げて、実際に実行してみます。Microsoft Word をターミナルから起動してみましょう。まずは find でファイルの場所を確認します。

$find /Applications -name *Word
/Volumes/Macintosh HD/Applications/Microsoft Office 2011/Microsoft Word.app/Contents/MacOS/Microsoft Word

続いて、表示された結果をクリップボードにコピーし、ターミナル.app で「テキストをエスケープしてペースト」を実行します。

$/Volumes/Macintosh HD/Applications/Microsoft Office 2011/Microsoft Word.app/Contents/MacOS/Microsoft Word

以上のように、空白文字の前にエスケープ文字が挿入されて、ペーストを行うことができました。

 

今回は、find の結果をコピーする例を挙げましたが、ネットで調べ物をして、見つけた結果をコピーして、そのままコマンドとして実行するときに重宝します。

 

 

 

 

 

Mac OS X のデフォルトではルートパーティションの名前は「Macintosh HD」

Related Post