GNU/Linux >> Linux の 問題 >  >> Linux

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/../../

つまり、正規化するためにパスが存在する必要はありません。


realpath を試す .以下はソース全体であり、これによりパブリック ドメインに寄贈されます。

// realpath.c: display the absolute path to a file or directory.
// Adam Liss, August, 2007
// This program is provided "as-is" to the public domain, without express or
// implied warranty, for any non-profit use, provided this notice is maintained.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libgen.h>   
#include <limits.h>

static char *s_pMyName;
void usage(void);

int main(int argc, char *argv[])
{
    char
        sPath[PATH_MAX];


    s_pMyName = strdup(basename(argv[0]));

    if (argc < 2)
        usage();

    printf("%s\n", realpath(argv[1], sPath));
    return 0;
}    

void usage(void)
{
    fprintf(stderr, "usage: %s PATH\n", s_pMyName);
    exit(1);
}

これを行うための直接の bash コマンドがあるかどうかはわかりませんが、通常は行います

normalDir="`cd "${dirToNormalize}";pwd`"
echo "${normalDir}"


Linux
  1. Linux の Bash で syslog を確認するには?

  2. パス名の .. を bash スクリプトの絶対名に変換する方法は?

  3. ターミナルウィンドウからLinuxでファイルを作成するには?

  1. VimでBashスクリプトを強調表示するには?

  2. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  3. セッション間で bash 履歴を保持するにはどうすればよいですか?

  1. BashでCSVファイルを解析するには?

  2. ファイルのフルパスを取得するには?

  3. Bashでファイルが空かどうかを確認するには?