1. ホーム
  2. linux

[解決済み】Bashでファイルパスを正規化する方法とは?

2022-04-04 05:19:46

質問

を変換したい。 /foo/bar/.. から /foo

これを行うbashコマンドはないのでしょうか?


編集:私の実際のケースでは、ディレクトリは存在します。

解決方法は?

パスからファイル名の一部を切り出したい場合、"dirname" と "basename" はあなたの友人であり、 "realpath" もまた便利です。

dirname /foo/bar/baz 
# /foo/bar 
basename /foo/bar/baz
# baz
dirname $( dirname  /foo/bar/baz  ) 
# /foo 
realpath ../foo
# ../foo: No such file or directory
realpath /tmp/../tmp/../tmp
# /tmp

realpath オルタナティヴ

もし realpath は、お使いのシェルでサポートされていない場合、次のようにしてください。

readlink -f /path/here/.. 

また

readlink -m /path/there/../../ 

と同じ働きをします。

realpath -s /path/here/../../

は、正規化するためにパスが存在する必要がないことを意味します。