Je souhaite obtenir uniquement le nom du répertoire parent d'un fichier.
Exemple: Quand je l'ai path=/a/b/c/d/file
, je veux seulement d
et non /a/b/c/d
(dont je tire dirname $path
) comme sortie.
Existe-t-il un moyen sophistiqué de procéder?
Il semble que vous souhaitiez le nom de base du nom de répertoire:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
commande supposera qu'il se trouve dans le répertoire courant (aka ".").parentname="$(basename "$(dirname "$pwd")")"
PWD
doivent être capitalisées. Essayezparentname="$(basename "$(dirname "$PWD")")"
.Vous pouvez utiliser pwd pour obtenir le répertoire de travail actuel et utiliser l' expansion des paramètres pour éviter de le bifurquer dans un autre (sous) shell.
Edit: source éprouvée
la source
${path##*/}
Je pense que c'est une solution moins gourmande en ressources:
edit: Désolé, l'expansion imbriquée n'est pas possible dans bash, mais cela fonctionne dans zsh. Version basique:
la source
filepath=file
ou filepath = / file`.foofile
? S'il n'est pas complet, le chemin ne peut pas le savoir (peut-être s'ilfoofile
s'agit d'un fichier existant et pas seulement d'une "chaîne").En bash, en une seule ligne:
la source
J'aime la réponse de Julian67 ci-dessus, mais voici un peu une version étendue:
la source