Dans mon script, j'ai besoin du répertoire du fichier avec lequel je travaille. Par exemple, le fichier = "stuff / backup / file.zip" . J'ai besoin d'un moyen d'obtenir la chaîne " stuff / backup / " de la variable $file
.
123
dirname $file
est ce que tu cherches
dirname $file
dirname "$file"
, plutôt. Sans les guillemets, cela se comportera mal si le nom du fichier ou du répertoire contient des espaces.sortira
qui est l'opposé de
basename
:sortirait
la source
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.Il serait également entièrement compatible POSIX de cette façon. J'espère que ça aide! :-)
la source
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 avezfile=file.zip
,dirname "$file"
reviendra.
, alors que${file%/*}
reviendrafile.zip
.case $file in */*) dir=${file%/*};; *) dir=.;; esac
est toujours POSIX-y et résout le problème.Pour obtenir
directorypath
dufilepath
:la source
Utilisez simplement
$ dirname /home/~username/stuff/backup/file.zip
Il reviendra
/home/~username/stuff/backup/
la source