web-dev-qa-db-fra.com

Obtenir le dernier nom / nom de fichier dans un argument de chemin de fichier dans Bash

J'essaie d'écrire un hook post-commit pour SVN, qui est hébergé sur notre serveur de développement. Mon objectif est d'essayer d'extraire automatiquement une copie du projet validé dans le répertoire où il est hébergé sur le serveur. Cependant, je dois pouvoir lire uniquement le dernier répertoire de la chaîne de répertoire transmise au script afin de pouvoir accéder au même sous-répertoire où nos projets sont hébergés.

Par exemple, si je crée un engagement SVN dans le projet "exemple", mon script obtient "/ usr/local/svn/repos/exemple" comme premier argument. Je dois obtenir juste "exemple" à la fin de la chaîne, puis le concaténer avec une autre chaîne afin de pouvoir passer à la commande "/ server/root/exemple" et de voir les modifications en direct immédiatement.

191
tj111

basename supprime le préfixe de répertoire d'un chemin:

$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
301
sth

L'approche suivante peut être utilisée pour obtenir n'importe quel chemin d'un nom de chemin:

pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))

Sortie:

c
b
a
78
Jingguo Yao

Bash peut obtenir la dernière partie d'un chemin sans avoir à appeler l'externe basename:

subdir="/path/to/whatever/${1##*/}"
69
Dennis Williamson