web-dev-qa-db-fra.com

Aller au répertoire parent d’un fichier avec cd?

J'écris un fichier .sh pour que je travaille, mais je suis maintenant au point où je dois aller dans le répertoire où se trouve le fichier /path/to/file.end. Le terminal ne le permet pas

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

il n'y a malheureusement aucune solution de contournement à ma connaissance, alors ce serait bien si vous pouviez aider!

9
Azsgy

Tapez cd $( dirname /path/to/file.end). Cela vous mènera dans /path/to.

Explication:

  • dirname renvoie le chemin complet d'un fichier (sans le nom de fichier que vous obtiendriez avec basename) - c.-à-d. dirname /etc/apt/apt.conf.d/99update-notifier renvoie /etc/apt/apt.conf.d
  • l'expression $(anything) est remplacée par le résultat de la commande entre parenthèses. Donc, cd $( dirname /etc/apt/apt.conf.d/99update-notifier) est exécuté en tant que cd /etc/apt/apt.conf.d

Une autre notation (mais ancienne et découragée) pour la même chose était

cd `dirname /path/to/file.end` 
10
guntbert

Vous ne pouvez pas cd dans un fichier. Voici une (ligne de commande) fonction qui va automatiquement cd dans un chemin pour un chemin de fichier complet:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
7
Rinzwind

Si vous ajoutez "/ .." au nom de fichier qui vous mènera au bon répertoire, par exemple. cd /path/to/file.end/... Cela fonctionne quand même sur Cygwin.

1
brain