Comment pouvez-vous cd dans le premier dossier disponible sans taper le nom?


30

J'étais récemment dans une situation difficile où j'étais dans un dossier, et je voulais cdun dossier de sous-répertoire. Il n'y avait qu'un seul dossier, à l'intérieur de ce dossier et c'était un nom vraiment long.

Home (I am here)
 |
 |
  --> /reallylongnamefolder

Existe-t-il un moyen d'entrer dans ce dossier au lieu de taper:

 cd reallylongnamefolder

1
de plusieurs façons: cd */ou en cd rea*/cas de doute, il n'y a qu'un seul sous-répertoire à tout moment (si vous utilisez bash, vous pouvez également cd rea[TAB].. dans d'autres shells mais la façon de développer le nom peut varier). Si "/ reallylongnamefolder" est un chemin absolu, même chose, mais avec '/' devant, par exemple:cd /rea*/
Olivier Dulac

Réponses:


38

Je conseillerais soit de taper les premières lettres et d'appuyer sur tab. Bash a une fonctionnalité de saisie semi-automatique qui est vraiment utile. S'il ne s'agit que d'un répertoire dans le chemin en cours, une simple pression sur tabremplira tout le répertoire.

Taper cdet appuyer tabdeux fois affichera toutes les options du répertoire actuel.

tab est généralement très utile en bash car vous avez accessible presque tous les exécutables en une ou deux touches.

cd *comme suggéré ci-dessus ne fonctionne que si le répertoire est en premier dans la liste et non masqué. S'il y a un fichier par ordre alphabétique avant votre répertoire, cela cdne changera pas du tout votre répertoire.


15
Vous ne devriez même pas avoir à taper de lettres du tout, s'il n'y a qu'un seul répertoire présent: cd <tab>sera assez intelligent.
amalloy

1
Fonctionne également sous Windows. (pour les gens qui viennent de google ..)
Koray Tugay

16

Je pense que je l'ai compris

cd * 
cd */

Mais je ne l'ai pas testé s'il y a plusieurs fichiers et un dossier!


Comme @Rinzwind l'a mentionné dans les commentaires!

Disons que vous avez trois longs dossiers:

 /thisislongfolder1
 /thisislongfolder2
 /thisislongfolder3

Si vous tapez la première lettre du fichier, appuyez tabdessus pour compléter automatiquement le nom du fichier! CRAZY STUFF!

Ainsi, dans l'exemple ci-dessus, vous pouvez taper: t tabet il se remplira automatiquement autant qu'il le peut: cd thisislongfolder(puis tapez le numéro vous-même).

Ou vous pouvez faire cd t*1vous emmènerait dansthisislongfolder1

Merci Rinzwind!


6
cd first_letter_or_some_letters puis {tab} est le plus simple (résout également votre problème de nombreux dossiers. Vous pouvez même mélanger des lettres avec plus d'un onglet et des lettres. Le système se complétera automatiquement autant que possible. Vous pouvez également faire cd r*ret j'espère que c'est le seul dossier commençant et se terminant par R.
Rinzwind

@Rinzwind wow! Je ne le savais pas! Merci!
Arian Faurtosh

Essaye le. Ajoutez vos résultats à votre réponse et vous obtiendrez probablement une certaine réputation ;-)
Rinzwind

4
cd */pourrait faire l'affaire
gniourf_gniourf

3
cd *échoue probablement plus souvent qu'elle ne réussit.
David Richerby

14
cd $(ls -d */|head -n 1)

ls -d */répertorie les répertoires, head -n 1donne le premier de cette liste.


Ouais et vous allez taper ça ... Je préfère aller tab-tab et chercher le nom plutôt que de taper ceci. C'est 100% correct cependant, belle réponse!
tomsmeding

1
@tomsmeding Si vous écrivez un script qui doit le faire cddans le premier répertoire, vous ne pouvez pas faire d'onglets.
user12205

-n 1 affiche le dernier 1 fichier du fichier. Si vous souhaitez utiliser ceci pour un ordre variable, vous pouvez utiliser: cd $ (ls -d -1 * / | sed -n '4p') pour ouvrir le 4ème dossier dans un répertoire. L'ajouter à un alias peut vous rendre plus rapide avec la navigation dans les dossiers.
Ivan Ivković

2

J'ai une belle configuration pour cela, cela me permet non seulement de cd vers ~ / somereallylongfoldername mais aussi de cd là-bas même lorsque je suis dans le dossier /

la première chose que j'utilise est zsh avec oh-my-zsh cela vous permettra également de cd sans avoir à vous soucier de la casse ou même sans taper cd

  1. installer git et zsh
sudo apt-get install zsh git
  1. installer Oh My ZSH

curl -L http://install.ohmyz.sh | sh

  1. Changez le shell par défaut en ZSH
chsh -s /bin/zsh

ouvrez et modifiez votre .zshrc qui se trouve dans votre dossier personnel et non caché

nano ~ / .zshrc

puis ajoutez la ligne suivante au bas du fichier export CDPATH=$CDPATH:/:/home/$USER/:/media/$USER/

Si vous aimez mon thème, vous pouvez également changer la ligne #ZSH_THEME="robbyrussell"enZSH_THEME="pygmalion"

Enregistrez et fermez le fichier puis redémarrez ie. fermer et rouvrir le shell ou simplement ouvrir un nouvel onglet et l'essayer

non, vous pouvez utiliser la touche de tabulation pour compléter les noms et dans ZSH, vous n'avez même pas besoin d'avoir le bon cas, vous pouvez taper docu et appuyer sur tab et cela le transformera en ~ / Documents

entrez la description de l'image ici


0

Vous pouvez changer de répertoire par numéro d'inode.
on trouve d'abord l'inode avec ls -il.
puis

cd $(find -inum directory_inode_number)

0

Si vous devez le faire dans un script ou prendre en charge des répertoires avec des noms indécodables:

cd $(python -c $'import os\nfor entry in os.listdir(b"."):\n if os.path.isdir(entry):\n  os.write(1, entry);break\nelse: os.write(1, b".")')

Cela fonctionne s'il y a des fichiers dans le répertoire, quel que soit leur ordre de tri par rapport aux répertoires.
Cela fonctionne pour les répertoires cachés en cas d' cd */échec.
Cela fonctionne si le nom n'est pas représentable dans les paramètres régionaux actuels lors de l' lsimpression uniquement ??au lieu d'un nom.


0

Prolongeant la réponse d'Ace:

cd $(ls -d -1 */ |sed -n '1p')

pour ouvrir le 1er dossier d'un répertoire. '1p' peut être changé en '2p' pour le deuxième répertoire.

ls -d -1 -la */

pour répertorier uniquement les répertoires d'un répertoire parent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.