torikatsu923.dev

サイト内検索

    【zsh】realpathでファイルの絶対パスをクリップボードにコピーする

    最近 realpath というコマンドを知りました。Claude にファイルを渡すときに絶対パスを書くのが面倒で、realpath と pbcopy の組み合わせに落ち着いた話です。

    はじめに

    こんにちは、とりかつ(@torikatsu923)です。

    最近 realpath というコマンドを知りました。

    きっかけは、Claude にメモやファイルを渡す機会が増えたことです。ファイルパスを全部書くのは面倒ですし、pwd | pbcopy でディレクトリをコピーしてからファイル名を書き足すのも億劫でした。

    realpathの使い方

    realpath と pbcopy を組み合わせます。

    realpath <filename> | pbcopy

    このコマンドでファイルの絶対パスがクリップボードにコピーされます。

    pwdを使う場合との違い

    realpath はファイル名を引数に取るので、pwd | pbcopy のあとにファイル名を書くのと変わらない、という指摘はありそうです。

    ただ、zsh のファイル名のタブ補完が使えるので、タイプミスがなくなり、タイプ量も減ります。私はここが便利だと感じています。

    realpathの挙動

    macOS では /bin/realpath にあります。オプションは -q だけです。

    以下は /Users/you/notes で実行した例です。# で始まる行が出力です。

    which realpath
    # /bin/realpath

    相対パスは絶対パスに直され、./ や ../ も解決されます。

    realpath docs/memo.md
    # /Users/you/notes/docs/memo.md
    
    realpath ./docs/../docs/memo.md
    # /Users/you/notes/docs/memo.md

    シンボリックリンクは、リンク先の実体のパスになります。次は link.md が docs/memo.md へのリンクの場合です。

    realpath link.md
    # /Users/you/notes/docs/memo.md

    存在しないファイルを渡すとエラーになり、終了コードは 1 です。

    realpath nothing.md
    # realpath: nothing.md: No such file or directory

    出力の末尾には改行が付き、pbcopy に渡すとクリップボードにも改行ごと入ります。取り除きたい場合は tr -d '\n' を挟みます。

    realpath <filename> | tr -d '\n' | pbcopy