linux-absolute-directory-of-file
Linuxでファイルの絶対ディレクトリを取得する
1. 前書き
このチュートリアルでは、2つの一般的なLinuxファイルシステムツールを使用して、特定のファイルの絶対ディレクトリを取得する方法を説明します。
2. 前提条件
残念ながら、現在のところ、ファイルの絶対ディレクトリを取得する単一のコマンドはありません。 代わりに、1つのコマンドの出力を他のコマンドの入力として使用して、操作を2つの部分に分割する必要があります。
2.1. readlink
ファイルのフルパスを取得するには、https://linux.die.net/man/1/readlink[_readlink_]コマンドを使用します。 _readlink_はシンボリックリンクの絶対パスを出力しますが、副作用として、*相対パスの絶対パスも出力します*。
たとえば、次のディレクトリ構造があるとします。
/
└── home/
└── example/
├── foo/
| └── file.txt
└── link -> foo/
_-f_フラグを使用して、相対パスまたはシンボリックリンクのいずれかのパスを正規化します。 したがって、ディレクトリを_ / home / example / _に変更すると、次のコマンドのいずれかを実行できます。
readlink -f foo/file.txt
readlink -f link/file.txt
readlink -f ./foo/file.txt
readlink -f ../example/foo/file.txt
これらのコマンドは出力します:
/home/example/foo/file.txt
最初のコマンドの場合、_readlink_は、_foo / _の相対パスを_ / home / example / foo / _の絶対パスに解決します。
2番目の場合、_readlink_は、_link / _のシンボリックリンクを同じ絶対パスに解決します。
最後の2つのコマンドでは、_readlink_は相対パスを正規化し、前の例と同じ絶対パスに解決します。
-
-f_フラグでは、指定されたパスの最後のコンポーネント(この例ではin_file.txt)以外のすべてが存在する必要があることに注意してください*。 パスが存在しない場合、出力は返されません。 たとえば、bar / _ディレクトリが存在しないため、_readlink -f bar / file.txt_を実行しても出力は生成されません。 対照的に、_readlink -f foo / other.txt_を実行すると、最終コンポーネント以外はすべて存在するため、 / home / example / foo / other.txt_が返されます。
代わりに、指定されたパスにコンポーネントが存在するかどうかを気にしない場合は、_- m_フラグを使用できます。 同様に、提供されたパス内のすべてのコンポーネントが存在するようにしたい場合は、_-e_フラグを使用できます。
2.2. dirname
2番目の前提条件は、* https://linux.die.net/man/1/dirname [_dirname_]コマンドです。このコマンドは、指定されたパスを含むディレクトリを出力します*。
ディレクトリを指定すると、_dirname_はそのディレクトリを含むパスを出力します。 たとえば、次を実行できます。
dirname /home/example/foo/
これは作り出すでしょう:
/home/example
絶対パスを指定したため、directory_dirname_は絶対ディレクトリを出力することに注意してください。 ディレクトリを_ / home / _に変更し、_dirname example / foo / _を実行すると、_dirname_は_example_を出力します。 原則として、*相対パスが提供されている場合、_dirname_は相対ディレクトリを出力し、絶対パスが提供されている場合、_dirname_は絶対ディレクトリを出力します*。
ファイルを指定すると、_dirname_はそのファイルを含むパスを出力します。 たとえば、次を実行できます。
dirname foo/file.txt
これは作り出すでしょう:
foo
3. ファイルの絶対ディレクトリ
ファイルの絶対ディレクトリを取得するには、_readlink_コマンドと_dirname_コマンドを組み合わせます。 これは、2つの方法のいずれかで実行できます。
3.1。 xargs
まず、https://linux.die.net/man/1/xargs [_xargs_]コマンドを使用できます。このコマンドは、指定されたコマンドの入力を引数に変換します。 出力を_readlink_から_xargs_にパイプし、_xargs_への引数としてコマンド_dirname_を指定することにより、この目的の絶対ディレクトリを取得できます。
readlink -f foo/file.txt | xargs dirname
これは次のようになります。
/home/example/foo
3.2. コマンド置換
同様に、コマンドが実行される場所でhttps://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html[command substitution] – _ $(command)_ –を使用できます。サブシェル、およびそのコマンドからの出力が呼び出しを置き換えます。 したがって、次を実行できます。
dirname $(readlink -f foo/file.txt)
このコマンドの結果:
/home/example/foo
同様に、次のコマンドも実行できますが、出力は同じままです。
dirname `readlink -f foo/file.txt`
*コマンド置換はbashで動作しますが、必ずしも他のシェルでは動作しないことに注意してください。*
4. 結論
このチュートリアルでは、_readlink_および_dirname_コマンドと、それらを使用して相対パスの絶対パスとパスを含むディレクトリをそれぞれ取得する方法を調べました。
_xargs_またはコマンド置換を使用してこれらのコマンドを組み合わせることにより、ファイルの絶対ディレクトリを取得できます。