はじめに
こんにちは!今回はrealpathコマンドについて解説します。
realpathは、ファイルやディレクトリの絶対パスを取得するコマンドです。シンボリックリンクを解決したり、相対パスを絶対パスに変換したりできます。
パスの処理をする時には超便利ですよ。
realpathコマンドとは
realpathは、ファイルパスの絶対パス(フルパス)を返す外部コマンドです。
主な機能:
- シンボリックリンク解決 - シンボリックリンクの実体を追跡
- 相対パス変換 - 相対パスを絶対パスに変換
- パス正規化 -
../や./を解決 - 存在確認 - ファイルが存在するか確認
- 複数ファイル対応 - 複数ファイルのパスを一度に処理
スクリプトでパス処理する時にはほぼ必須です。
基本構文
|
|
ファイルの絶対パスを返します。
主なオプション
| オプション | 説明 |
|---|---|
-e, --canonicalize-existing |
ファイルが存在することを確認 |
-L, --logical |
シンボリックリンクを解決しない |
-m, --canonicalize-missing |
ファイルが存在しなくても処理 |
-s, --strip |
末尾のスラッシュを削除 |
-z, --zero |
NUL文字で区切る |
--relative-to=BASE |
BASEからの相対パスで出力 |
-q, --quiet |
エラー出力を抑制 |
使用例
例1: 基本的なパス取得
|
|
実行結果:
|
|
相対パスを絶対パスに変換します。
例2: シンボリックリンクを解決
|
|
実行結果:
|
|
シンボリックリンクの実体のパスを返します。
例3: 相対パスを絶対パスに
|
|
実行結果:
|
|
../や./を解決して絶対パスに変換。
例4: 存在確認付き
|
|
実行結果:
|
|
-eオプションでファイル存在確認。
例5: 複数ファイルのパスを取得
|
|
実行結果:
|
|
複数ファイルのパスを一度に取得。
例6: シンボリックリンクを解決しない
|
|
実行結果:
|
|
-Lオプションでシンボリックリンクを解決しません。
例7: ファイルが存在しなくても処理
|
|
実行結果:
|
|
-mオプションで、ファイルが存在しなくても処理。
例8: パスをシェル変数に保存
|
|
実行結果:
|
|
スクリプト内で絶対パスを変数に保存。
例9: ディレクトリパスを取得
|
|
実行結果:
|
|
ディレクトリのパスも取得可能。
例10: readlinkとの比較
|
|
実行結果:
|
|
realpathは絶対パス、readlinkはリンク先を返します。
Tips・注意点
scriptのディレクトリを取得
|
|
スクリプト自身のディレクトリを取得。
相対パスから絶対パスへ変換
|
|
相対パス処理を簡潔に。
ファイル存在確認の活用
|
|
ファイル存在確認に使える。
実践的な使い方
Backupスクリプト
|
|
相対パスで渡されたファイルを絶対パスに変換。
設定ファイル検索
|
|
複数の候補から設定ファイルを検索。
ログ出力時のパス正規化
|
|
ログファイルパスを正規化。
シンボリックリンクの追跡
|
|
シンボリックリンクをたどって実体を見つける。
まとめ
realpathコマンドのポイント:
- ファイルの絶対パスを取得するコマンド
- デフォルト: シンボリックリンクを解決して絶対パスを返す
- -e: ファイル存在確認
- -L: シンボリックリンクを解決しない
- -m: ファイルが存在しなくても処理
- -s: 末尾のスラッシュを削除
- よく使う組み合わせ:
realpath -e,$(realpath "$file")
スクリプトでパスを扱う時には超便利なコマンドですよ!