GNU/Linux >> Tutoriels Linux >  >> Linux

Comment normaliser un chemin de fichier dans Bash ?

si vous souhaitez supprimer une partie d'un nom de fichier du chemin, "dirname" et "basename" sont vos amis, et "realpath" est également pratique.

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

Si realpath n'est pas supporté par votre shell, vous pouvez essayer

readlink -f /path/here/.. 

Aussi

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

Fonctionne comme

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

en ce que le chemin n'a pas besoin d'exister pour être normalisé.


Essayez realpath . Vous trouverez ci-dessous la source dans son intégralité, par la présente donnée au domaine public.

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

Je ne sais pas s'il existe une commande bash directe pour le faire, mais je le fais habituellement

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

et ça marche bien.


Linux
  1. Comment mettre en surbrillance les scripts Bash dans Vim ?

  2. Comment parser un fichier CSV dans Bash ?

  3. Comment obtenir le chemin complet d'un fichier ?

  4. Comment vérifier syslog dans Bash sous Linux ?

  5. Comment grep pour unicode � dans un script bash

Comment lire des fichiers ligne par ligne dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment lire un fichier ligne par ligne dans Bash

Comment rediriger stderr vers stdout dans Bash

Comment utiliser les opérateurs de test de fichiers Bash sous Linux

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell