Extrait de l'annuaire à partir du chemin d'accès
Dans mon script j'ai besoin de la répertoire du fichier que je suis en train de travailler avec. Par exemple, le fichier="stuff/backup/file.zip". J'ai besoin d'un moyen d'obtenir la chaîne de caractères "stuff/sauvegarde/" à partir de la variable $file
.
Vous devez vous connecter pour publier un commentaire.
est ce que vous êtes à la recherche pour
dirname $file
dirname "$file"
, plutôt. Sans les guillemets cela va mal se conduire si le fichier ou le répertoire nom comporte des espaces.sortie
qui est à l'opposé de
basename
:serait sortie de
Pour arriver
directorypath
de lafilepath
:À l'aide de
${file%/*}
comme suggéré par Urvin/LuFFy est techniquement meilleur, car vous n'aurez pas compter sur une commande externe. Pour obtenir le nom de base de la même manière que vous pourriez faire${file##*/}
. Il est inutile d'utiliser une commande externe, sauf si vous en avez besoin.Il serait également entièrement compatible POSIX de cette façon. Espérons que cela aide! 🙂
dirname
a un avantage sur l' (la plus efficace) intégré dans l'approche, et si vous n'êtes pas certain que votre chemin est complet pour commencer. Si vous avezfile=file.zip
,dirname "$file"
sera de retour.
, alors que${file%/*}
sera de retourfile.zip
.case $file in */*) dir=${file%/*};; *) dir=.;; esac
est encore POSIX-y et traite de la question.Simplement utiliser
$ dirname /home/~username/stuff/backup/file.zip
Il sera de retour
/home/~username/stuff/backup/