1. 概要

ファイルとディレクトリは、オペレーティングシステムの構成要素です。 Linuxユーザーとして、私たちはファイルとディレクトリに対してさまざまな操作を実行します。 そのような操作の1つは、ファイルのフルパスを見つけることです。 ファイルのフルパスは、絶対パスまたは正規パスとも呼ばれます。

このチュートリアルでは、ファイルのフルパスを見つけるためのさまざまな方法について説明します。

2. 設定

例として使用するファイルとディレクトリの構造を作成しましょう。

$ cd /tmp
$ mkdir -p dir1/dir2/dir3/dir4/dir5
$ touch dir1/dir2/file2.txt
$ touch dir1/dir2/dir3/dir4/file4.txt
$ touch dir1/dir2/dir3/dir4/dir5/file5.txt

$ tree /tmp/dir1/
/tmp/dir1/
└── dir2
    ├── dir3
    │   └── dir4
    │       ├── dir5
    │       │   └── file5.txt
    │       └── file4.txt
    └── file2.txt

4 directories, 3 files

3. readlinkコマンドの使用

readlink コマンドは、正規のファイル名を出力します。 このコマンドの-fオプションを使用して、ファイルのフルパスを見つけることができます。

$ cd /tmp/dir1/dir2/dir3/dir4/dir5/
$ readlink -f file5.txt 
/tmp/dir1/dir2/dir3/dir4/dir5/file5.txt

4. realpathコマンドの使用

または、 realpath コマンドを使用して、ファイルの絶対パスを取得することもできます。

$ cd /tmp/dir1/dir2/dir3/dir4/
$ realpath file4.txt 
/tmp/dir1/dir2/dir3/dir4/file4.txt

5. basenameコマンドとdirnameコマンドの組み合わせの使用

basename コマンドは、ファイル名からディレクトリとサフィックスを削除する場合に役立ちます。 同様に、 dirname コマンドを使用して、ファイル名から最後のコンポーネントを削除できます。

$ basename /tmp/dir1/dir2/dir3/dir4/file4.txt
file4.txt
$ dirname /tmp/dir1/dir2/dir3/dir4/file4.txt
/tmp/dir1/dir2/dir3/dir4

これら2つのコマンドを組み合わせて使用すると、ファイルの絶対パスを見つけることができます。 同じための簡単なシェルスクリプトを作成しましょう:

$ cat get_full_path.sh 
#! /bin/bash
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"

$ chmod +x get_full_path.sh
$ ./get_full_path.sh file4.txt
/tmp/dir1/dir2/dir3/dir4/file4.txt

まず、 dirname コマンドを使用して、ファイルが配置されているディレクトリを検索します。 次に、cdコマンドを使用してディレクトリを変更します。

次に、pwdコマンドを使用して現在の作業ディレクトリを印刷します。 ここでは、 -P オプションを適用して、シンボリックリンクの代わりに物理的な場所を表示しています。

最後に、 basename コマンドを使用して、ディレクトリなしでファイル名を出力します。

6. findコマンドの使用

find コマンドは、ディレクトリ階層内のファイルを検索します。 このコマンドを使用して、ファイルの絶対パスを出力できます。

$ cd /tmp/dir1/
$ find $PWD -type f -name file4.txt 
/tmp/dir1/dir2/dir3/dir4/file4.txt

7. 結論

この記事では、ファイルの絶対パスを見つけるためのさまざまな実用的な例について説明しました。 最初に、readlinkおよびrealpathコマンドの使用法について説明しました。 次に、basenameコマンドとdirnameコマンドを組み合わせて使用しました。 最後に、findコマンドの例を見ました。 これらのコマンドを日常生活で使用して、生産性を向上させることができます。