GNU/Linux >> Linux Esercitazione >  >> Linux

Come si normalizza un percorso di file in Bash?

se vuoi estrarre parte di un nome file dal percorso, "dirname" e "basename" sono i tuoi amici, e anche "realpath" è utile.

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 alternative

Se realpath non è supportato dalla tua shell, puoi provare

readlink -f /path/here/.. 

Inoltre

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

Funziona come

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

in quanto il percorso non ha bisogno di esistere per essere normalizzato.


Prova realpath . Di seguito si riporta integralmente la fonte, qui donata al pubblico dominio.

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

Non so se esiste un comando bash diretto per farlo, ma di solito lo faccio

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

e funziona bene.


Linux
  1. Come evidenziare gli script Bash in Vim?

  2. Come analizzare un file CSV in Bash?

  3. Come ottenere il percorso completo di un file?

  4. Come controllare syslog in Bash su Linux?

  5. Come convertire .. in nomi di percorso in nome assoluto in uno script bash?

Come leggere i file riga per riga in Bash

Come verificare se un file o una directory esiste in Bash

Come leggere un file riga per riga in Bash

Come reindirizzare stderr a stdout in Bash

Come utilizzare gli operatori di test di file Bash in Linux

Come verificare se esiste un file o una directory in Bash Shell