GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo se normaliza una ruta de archivo en Bash?

si desea extraer parte de un nombre de archivo de la ruta, "dirname" y "basename" son sus amigos, y "realpath" también es útil.

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 alternativas

Si realpath no es compatible con su shell, puede probar

readlink -f /path/here/.. 

También

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

Funciona igual que

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

en que la ruta no necesita existir para ser normalizada.


Prueba realpath . A continuación se muestra la fuente en su totalidad, por la presente donada al dominio público.

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

No sé si hay un comando bash directo para hacer esto, pero normalmente lo hago

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

y funciona bien.


Linux
  1. ¿Cómo resaltar los scripts de Bash en Vim?

  2. ¿Cómo verificar syslog en Bash en Linux?

  3. ¿Cómo convertir ... en nombres de ruta a nombre absoluto en un script bash?

  4. ¿Cómo crear un archivo en Linux desde la ventana de terminal?

  5. ¿Cómo verificar si un archivo está vacío en Bash?

Cómo leer archivos línea por línea en Bash

Cómo verificar si existe un archivo o directorio en Bash

Cómo leer un archivo línea por línea en Bash

Cómo redirigir stderr a stdout en Bash

Cómo usar operadores de prueba de archivos Bash en Linux

Cómo verificar si existe un archivo o directorio en Bash Shell