Réponses:
dirname $file
est ce que tu cherches
dirname "$file"
, plutôt. Sans les guillemets, cela se comportera mal si le nom du fichier ou du répertoire contient des espaces.
dirname $file
sortira
stuff/backup
qui est l'opposé de basename
:
basename $file
sortirait
file.zip
Utiliser ${file%/*}
comme suggéré par Urvin / LuFFy est techniquement meilleur puisque vous ne comptez pas sur une commande externe. Pour obtenir le nom de base de la même manière que vous pourriez le faire ${file##*/}
. Il n'est pas nécessaire d'utiliser une commande externe sauf si vous en avez besoin.
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
Il serait également entièrement compatible POSIX de cette façon. J'espère que ça aide! :-)
dirname
a un avantage sur l'approche intégrée (plus efficace), et c'est si vous n'êtes pas certain que votre chemin est pleinement qualifié pour commencer. Si vous avez file=file.zip
, dirname "$file"
reviendra .
, alors que ${file%/*}
reviendra file.zip
.
case $file in */*) dir=${file%/*};; *) dir=.;; esac
est toujours POSIX-y et résout le problème.
Pour obtenir directorypath
du filepath
:
file="stuff/backup/file.zip"
dirPath=${file%/*}/
echo ${dirPath}
Utilisez simplement $ dirname /home/~username/stuff/backup/file.zip
Il reviendra /home/~username/stuff/backup/
dirname $file