GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie normalisiert man einen Dateipfad in Bash?

Wenn Sie einen Teil eines Dateinamens aus dem Pfad herausschneiden möchten, sind "dirname" und "basename" Ihre Freunde, und "realpath" ist auch praktisch.

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 Alternativen

Wenn realpath von Ihrer Shell nicht unterstützt wird, können Sie es mit

versuchen
readlink -f /path/here/.. 

Auch

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

Funktioniert genauso wie

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

, dass der Pfad nicht existieren muss, um normalisiert zu werden.


Versuchen Sie es mit realpath . Unten ist die Quelle in ihrer Gesamtheit, die hiermit gemeinfrei ist.

// 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);
}

Ich weiß nicht, ob es dafür einen direkten Bash-Befehl gibt, aber ich tue es normalerweise

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

und es funktioniert gut.


Linux
  1. Wie kann man Bash-Skripte in Vim hervorheben?

  2. Wie parse ich eine CSV-Datei in Bash?

  3. Wie erhalte ich den vollständigen Pfad einer Datei?

  4. Wie man einen Abschnitt einer Datei in der Bash-Shell grep

  5. Wie man in einem Bash-Skript nach Unicode sucht

So lesen Sie Dateien Zeile für Zeile in Bash

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So lesen Sie eine Datei Zeile für Zeile in Bash

So leiten Sie stderr in Bash auf stdout um

So verwenden Sie Bash-Dateitestoperatoren in Linux

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist