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 être capable de lire uniquement le dernier répertoire de la chaîne de répertoire passée au script afin de passer au même sous-répertoire où nos projets sont hébergés.
Par exemple, si je fais un commit SVN dans le projet "example", mon script obtient "/ usr / local / svn / repos / example" comme premier argument. J'ai besoin de simplement "exemple" à la fin de la chaîne, puis de le concaténer avec une autre chaîne afin que je puisse passer à "/ server / root / example" et voir les changements en direct immédiatement.
SUBDIR="/path/to/whatever/$(basename $1)"
$1
ou$1
est videL'approche suivante peut être utilisée pour obtenir n'importe quel chemin d'un nom de chemin:
Production:
la source
echo "$(basename "$(dirname "$pathname")")"
Bash peut obtenir la dernière partie d'un chemin sans avoir à appeler l'externe
basename
:la source
d=/home/me/somefolder;subdir="/$d/${1##*/}"
Je me suis retrouvé avec quelque chose comme//home/me/somefolder//
le $ d vient en fait d'une bouclefor d in $(find $SOMEFOLDER -maxdepth 1 -type d);
utilisant Workssubdir=$(basename $d)
fonctionne comme prévu.while
au lieu defor
parcourir la sortie defind
(find -print0 | xargs -0
est mieux) ou utiliser la globalisation:for d in $SOMEFOLDER/*/
(la barre oblique finale fonctionne comme-type d
- vous pouvez utiliser**
dans Bash 4 pour la récursion si vousshopt -s globstar
, mais un message "Liste d'arguments trop longue" est possible). Notez que la${1}
partie de la commande représente le premier argument d'un script ou d'une fonction. Vous devrez peut-être utiliser${d##*/}
une autre spécification de variable ou d'argument ou vous assurer qu'un argument est transmis$1
$1
contientthe path from which last component is to be taken out
. J'ai raté cette partie. Mon cas d'utilisation:target_path='/home/user/dir1/dir2/dir3/'; target_path="${target_path%/}"; last_component=${target_path##*/}; echo $last_component
- 😉 Œuvres${1##*/}
fonctionne: unix.stackexchange.com/a/171786/15070