Dans Bash, si VAR="/home/me/mydir/file.c"
, comment puis-je obtenir "/home/me/mydir"
?
400
dirname
et basename
sont les outils que vous recherchez pour extraire des composants de chemin:
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
Ils ne sont pas internes commandes Bash mais ils font partie de la norme POSIX (voir dirname
, basename
) et devrait donc être disponible sur la grande majorité des systèmes qui seront en cours d' exécution Bash.
Pour éviter la dépendance avec
basename
etdirname
la source
Sur une note connexe, si vous n'avez que le nom de fichier ou le chemin d'accès relatif,
dirname
cela ne sera pas utile en soi. Pour moi, la réponse a fini par êtrereadlink
.Vous pouvez ensuite combiner les deux pour obtenir uniquement le répertoire.
la source
readlink -m "$fname"
pourSi vous vous souciez des fichiers cibles pour être un lien symbolique, vous pouvez d'abord le vérifier et obtenir le fichier d'origine. La clause if ci-dessous peut vous aider.
la source
Je jouais avec ça et j'ai trouvé une alternative.
La partie que j'ai aimé, c'est qu'il était facile d'étendre la sauvegarde de l'arborescence:
la source
Voici un script que j'ai utilisé pour le rognage récursif. Remplacez $ 1 par le répertoire que vous voulez, bien sûr.
la source
Tout d'abord, je l'ai remplacé
/
par un espace vide (). Ensuite, j'ai supprimé tous les caractères avant tout espace vide (
). À la fin, j'ai supprimé le premier caractère qui est un espace vide (
).
la source
où vous obtenez le chemin complet avec new_path =
$(dirname ${BASH_SOURCE[0]})
. Vous modifiez le répertoire en cours aveccd
new_path , puis exécutezpwd
pour obtenir le chemin d'accès complet au répertoire en cours.la source