Aller dans le répertoire parent d'un fichier avec cd?

9

J'écris un .sh pour faire un peu de travail pour moi, mais je suis maintenant au point où je dois cd dans le répertoire où se trouve le fichier /path/to/file.end. Terminal ne permet pas

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

il n'y a malheureusement pas de solution de contournement que je connaisse, donc ce serait bien si vous pouviez aider!

Azsgy
la source
4
Tu veux dire cd /path/to? Cela changera le répertoire dans le répertoire dans lequel se trouve le fichier file.end.
Alaa Ali
1
Non, le fichier est variable, et je voudrais entrer le chemin du fichier (déposez-le dans le terminal) puis allez dans le dossier dans
lequel

Réponses:

10

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

Explication:

  • dirnameretourne le chemin complet d'un fichier (sans le nom de fichier, que vous obtiendriez avec basename) - c. -à- dirname /etc/apt/apt.conf.d/99update-notifierretours/etc/apt/apt.conf.d
  • l'expression $(anything)est remplacée par le résultat de la commande entre parenthèses. cd $( dirname /etc/apt/apt.conf.d/99update-notifier)Est donc exécuté commecd /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` 
guntbert
la source
8

Vous ne pouvez pas cddans un fichier. Voici une (ligne de commande) fonction qui sera automatiquement cddans un chemin pour un chemin de fichier complet donné:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
Rinzwind
la source
Ai-je bien compris?: Function fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} la réponse est: bash: erreur de syntaxe près du jeton inattendu `pwd 'cela me donne une erreur de cette façon :(
Azsgy
2
@Atsch, besoin d'un point-virgule avant pwd, et si vous définissez une fonction sur une seule ligne, besoin d'un point-virgule après pwd.
glenn jackman
@glennjackman, la fonction se ferme sans aucune sortie ni changement de dir :(
Azsgy
exécutez la fonction, puis entrez echo $?- quel est le statut de sortie?
glenn jackman
sacrément je n'aurais pas dû douter de moi. L'alternative me semblait meilleure quand je l'ai trouvée _O-
Rinzwind
1

Si vous ajoutez "/ .." au nom de fichier qui vous amènera au bon répertoire, par exemple cd /path/to/file.end/... Cela fonctionne de toute façon sur Cygwin.

cerveau
la source
4
Ne fonctionne pas en bash;) touch test && cd /home/test/test/..ditbash: cd: /home/test/test/..: No such file or directory
Rinzwind