Quelles sont les utilisations pratiques de pushd
et popd
quand il y a un avantage à utiliser ces deux commandes sur cd
et cd -
?
EDIT : Je » suis à la recherche dexemples pratiques dutilisation de ces deux commandes ou de raisons de conserver la pile avec les répertoires (lorsque vous avez terminé les tabulations, cd -
, alias pour raccourcir cd ..
, etc.).
Réponse
pushd
, popd
et dirs
sont des composants internes du shell qui vous permet de manipuler la pile de répertoires . Cela peut être utilisé pour changer de répertoire mais revenir au répertoire doù vous venez.
Par exemple
démarrer avec les répertoires suivants:
$ pwd /home/saml/somedir $ ls dir1 dir2 dir3
pushd to dir1
$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir
La commande
dirs
confirme que nous avons maintenant 2 répertoires sur la pile. dir1
et le répertoire dorigine, somedir
. REMARQUE: Notre » actuel » est ~/somedir/dir1
.
pushd to ../dir3 (parce que nous « sommes à lintérieur dir1
maintenant)
$ pushd ../dir3 ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir3
dirs
montre que nous avons maintenant 3 répertoires dans la pile. dir3
, dir1
et somedir
. Notez la direction. Chaque nouveau répertoire est ajouté à gauche. Lorsque nous commençons à ouvrir des répertoires désactivé, ils « viendront également de la gauche.
changer manuellement les répertoires en ../dir2
$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir
Commencez maintenant à ouvrir les répertoires
$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1
Notez que nous sommes revenus à dir1
.
Pop à nouveau …
$ popd ~/somedir $ pwd /home/saml/somedir
Et nous « sommes de retour là où nous avons commencé, somedir
.
Peut-être un peu déroutant, mais le chef du stac k est le répertoire dans lequel vous « êtes actuellement. Par conséquent, lorsque nous revenons à somedir
, même si dirs
le montre:
$ dirs ~/somedir
Notre pile est en fait vide.
$ popd bash: popd: directory stack empty
Commentaires
Réponse
Il y a un cas dutilisation vraiment utile pour les commandes pushd
et popd
pour travailler avec plusieurs dossiers simultanément.
Vous pouvez naviguer dans la pile très facilement, car elle est énumérée. Cela signifie que vous pouvez avoir plusieurs dossiers de travail à votre disposition pendant le travail.
Voir un exemple simple ci-dessous.
Commençons par créer un exemple de structure de dossier.
user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3
Ensuite, vous pouvez ajouter tous vos dossiers à la pile :
user@vb:~/navigate$ pushd dir1/ ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir1$ pushd ../dir2/ ~/navigate/dir2 ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir2$ pushd ../dir3/ ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate
Vous pouvez le rechercher en:
user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate
Pour naviguer en toute sécurité, vous devez ajouter deux fois le dernier (zéro) dossier, car il sera toujours réécrit:
user@vb:~/navigate/dir3$ pushd . user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate
Maintenant, vous pouvez parcourir ces dossiers et travailler avec pile comme avec les alias pour les dossiers.Je suppose que la partie suivante est explicite:
user@vb:~/navigate/dir3$ cd ~4 user@vb:~/navigate$ dirs -v 0 ~/navigate 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate$ cd ~3 user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate/dir1$ touch text.txt user@vb:~/navigate/dir1$ cp text.txt ~2 user@vb:~/navigate/dir1$ ls ~2 text.txt user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate
Conseil supplémentaire consiste à créer un alias pour dirs -v
.
Par exemple:
# In ~/.bashrc alias dirs="dirs -v"
Commentaires
- Et vous pouvez vider la pile de
dirs -c
- +1 pour donnant en fait quelques exemples pratiques. Il est ‘ de voir facilement ce que font pushd / popd depuis la page de manuel, mais les répertoires et cd ~ # ne sont pas évidents au début.
- vous pouvez également utiliser une solution comme fasd pour ce type de workflow à la place, bien que
- @Jun, il y a ‘ s » mkdir dir {1,2,3} » pour créer 3 répertoires en un seul coup.
- @JunMurakami cela a fait mon année! Bonne 2020!
Réponse
Un cas dutilisation simple pour utiliser la pile de répertoires, ce que vous ne pouvez pas faire avec un simple cd est :
pushd .
ajoute le répertoire actuel XX à la pile dirs
. Ensuite, vous pouvez vous déplacer en utilisant cd
, et pour revenir à XX, il vous suffit de faire popd
quelle que soit la distance à laquelle vous vous trouvez larborescence des répertoires (peut sauter par-dessus plusieurs niveaux, sur le côté, etc.). Particulièrement utile dans les scripts bash.
Commentaires
- Je pense que cest la fonctionnalité dont je profite le plus souvent. Étant donné que
pushd
/popd
fonctionne indépendamment decd
, vous pouvez les utiliser comme une solution plus stable signet quecd -
. - pour moi ce nest pas vrai. Chaque fois que jutilise cd, ma pile change.
- oh cétait parce que jutilisais zsh, quand je passe à bash, ça marche bien
- Cest la seule réponse de fond en ce qui concerne une comparaison avec cd -, IMO. Quant à savoir si pushd foo; < changement de répertoire aléatoire >; popd vaut plus que a = foo; cd $ a; < changement de répertoire aléatoire >; cd $ a … Pour les scripts, je peux voir une minuscule commodité syntaxique dans le premier (pushd), mais une amélioration massive de la clarté dans le second (variables [explicites]!). Pour une session interactive, je pense que je supposerais simplement que ma hiérarchie de répertoires est organisée correctement en premier lieu, et si je me perdais simplement cd ~ / back / to / évident / path.
- @HarendraSingh vous ne ‘ Avez-vous défini
AUTO_PUSHD
? Cela fera quecd
se comportera commepushd
, le désarmera et vous ‘ serez de retour à » comportement normal « .
Réponse
pushd
et popd
vous permettent de manipuler les répertoires sur la pile.
Lorsque vous pushd
un répertoire, vous placez le répertoire courant sur la pile et changez de répertoire pour celui spécifié comme paramètre.
popd
vous permettra de retourner dans le répertoire de la pile.
Si vous répétez, la traversée des répertoires sera en quelque sorte préservée et vous pourrez revenir aux répertoires enregistrés dans lordre inverse de celui dans lequel vous les avez enregistrés.
Réponse
Pour bash , en gros: au lieu dutiliser cd, on peut utilisez pushd
pour changer de répertoire. Avec un usage pratique: lhistorique des répertoires visités est sauvegardé (correctement: empilé) et on peut basculer entre eux:
pushd /home; pushd /var; pushd log
Pour voir la pile utilisez dirs
et pour une navigation plus facile (pour obtenir les numéros des » stack-entries » utilisez:
dirs -v
Sortie:
me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp
Utilisez maintenant ces nombres avec cd
et ~
comme:
cd ~1
Mais ces nombres sont réorganisés maintenant et se positionnent à » 0 » va changer, donc il suffit de pushd
le répertoire en première position deux fois (ou utilisez un mannequin à la position 0) comme:
me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp
Maintenant 1..3 conservera leur position
(Pour libérer le répertoire courant de la pile / en la supprimant de lhistorique, utilisez popd
)
Answer
Le pushd / popd est un concept si simple qui ma pris du temps à comprendre car les gens ont tendance à lenseigner en définissant ces commandes comme des commandes qui » manipulent la pile de répertoires « , ce qui à mon avis est très déroutant.
Je regarde les choses différemment:
pushd [nom_dossier] – va cd vers [nom_dossier] et document la destination qui est [nom_dossier] dans une pile de répertoires tandis que le répertoire supérieur dans la pile sera toujours le répertoire actuel dans lequel vous vous trouvez
popd – vous mettra dabord en lenregistrement du répertoire qui se trouve alors au sommet de la pile et supprimez la documentation (supprimez-la de la pile de répertoires)
dirs – Affiche la pile de répertoires (peut être traité comme le répertoire Db où lentrée la plus à gauche est le répertoire courant (haut de la pile).
Les 2 cas dutilisation les plus courants sont donc:
Cas dutilisation 1: Navigation avec pushd et popd
root@mypc:/main/$ ls dir1 dir2 dir3 dir4 root@mypc:/main/$ dirs # prints the current stack /main root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now: /main/dir1 /main root@mypc:/main/dir1$ # I am now in /main/dir1 root@mypc:/main/dir1$ # Now let"s go wild and document whatever I want root@mypc:/main/dir1$ pushd ../dir2 root@mypc:/main/dir2$ # Woo I am in /main/dir2 root@mypc:/main/dir2$ pushd ../dir3 root@mypc:/main/dir3$ # Woo I am in /main/dir3 root@mypc:/main/dir3$ pushd ../dir4 root@mypc:/main/dir4$ # Woo I am in /main/dir4 root@mypc:/main/dir4$ dirs # Now dir stack is: /main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
Disons Jai fait ce qui précède car je voudrais revenir aux dossiers que jai documentés!
Notez que si je cd manuellement, jaffecterai lentrée de la pile de répertoires supérieure (qui est toujours le répertoire actuel)
root@mypc:/main/dir4$ cd .. # Now dir stack is: # (note that /main appear in the leftmost as well which is the top of the stack) /main /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$
Naviguons maintenant en arrière:
root@mypc:/main$ popd root@mypc:/main$ # Still in /main since it was at the top of the dir stack root@mypc:/main$ dirs # Stack is now: /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ popd root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2 root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1 root@mypc:/main/dir1$ dirs # Stack is now: /main
Encore une fois, je peux documenter le répertoire que je veux puis naviguez manuellement vers un autre répertoire, puis je pourrai facilement revenir au répertoire documenté que jai inséré dans la pile.
Cas dutilisation 2: Navigation en utilisant lindex de pile numérique
Disons que jai poussé en utilisant pushd dir4 dir3 dir2 dir1, maintenant en cours dexécution dir -v affichera:
root@mypc:/main$ dirs -v 0 /main/dir1 (this is the current dir you are in always) 1 /main/dir2 2 /main/dir3 3 /main/dir4
Vous pouvez maintenant effectuer nimporte quelle opération Linux impliquant des répertoires en utilisant lindex de pile:
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like: # cp /main/dir2/temp.txt /main/dir3/new_temp.txt
Vous pouvez même supprimer un entrée de la pile de dir:
root@mypc:/main$ popd ~4
Jespère que lutilisation des mots « documenter » ou penser à la pile de dir comme une sorte de Db simplifie le concept!
Réponse
En termes simples – lorsque vous avez besoin de naviguer entre plus de 2 répertoires, généralement plusieurs fois en arrière & puis, car cd -
ne le coupera pas avec autre chose que 2 dossiers.
Ainsi, par exemple, au lieu dessayer de revenir avec les longs chemins précédents en regardant lhistorique de votre tampon ou en complétant par tabulation un long chemin, vous empilez simplement les plus importants et si nécessaire, vous vous déplacez facilement vers eux par leur numéro seul. La rotation entre les structures de répertoires complexes et les longs chemins devient fluide et rapide.
Les fonctions intégrées vous permettent également de réorganiser la pile ou de faire apparaître les répertoires dont vous navez plus besoin, ce qui permet une flexibilité dans votre flux de travail.
Lempilement des répertoires peut également être utilisé dans les scripts de la même manière pour les opérations qui sétendent sur plusieurs répertoires.
Réponse
I Jai trouvé lutilisation de dirs / popd / pushd un peu inconfortable. Jai trouvé ma solution personnelle dans tcsh, en ajoutant le code suivant dans .alias
foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*"
de cette façon jai aliasé, par exemple, « p. » pour enregistrer le répertoire de travail actuel dans le fichier ~ / .mydir. et « cd. » pour récupérer ce répertoire quand et où je veux. « del. » supprime le fichier correspondant; « home. » définit le répertoire sur le répertoire home (équivalent à cd; p.); « cdl » répertorie les répertoires enregistrés. Notez que si vous utilisez ~ / Dropbox / .mydir $ b (ou tout autre service cloud comme par exemple ownCloud) au lieu de ~ / .mydir $ b, vous obtenez un moyen intelligent pour utiliser vos répertoires préférés sur différents comptes et ordinateurs.
Réponse
Utilisation de cd
et cd -
vous permet de basculer uniquement entre vos deux répertoires les plus récemment utilisés. La taille de votre « répertoire de travail » est de deux.
En utilisant pushd
, vous pouvez conserver un nombre arbitrairement grand de répertoires dans votre jeu de travail.
Jutilise pushd
la plupart du temps plutôt que cd
. Une fois que vous avez « construit une pile de répertoires actifs avec pushd directory_name
, vous pouvez ensuite passer de lun à lautre toute la journée avec pushd ~#
.
pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order.
Jutilise popd
rarement, uniquement lorsque je veux supprimer un répertoire de la pile quand je sais que jai « terminé en utilisant ce répertoire.
Allez dans le répertoire et supprimez-le de la pile:
popd ~2
Restez dans le répertoire actuel et supprimez un autre répertoire du stack:
popd +2
Vous vous retrouvez avec un style de travail similaire à louverture de plusieurs fenêtres ou onglets de terminal (un pour chaque répertoire dans lequel vous « êtes activement travail), mais le tout dans un seul terminal.Cela permet déconomiser de lespace sur lécran, et comme les chemins de répertoire sont tous disponibles dans un seul shell, vous pouvez faire des choses comme:
- copier des fichiers entre les répertoires avec lesquels vous travaillez actuellement
- afficher ou modifier des fichiers dans un autre répertoire sans y aller
Exemples:
cp ~2/myfile.txt ~4 less ~2/myfile.txt
In tcsh
(mais pas bash
), vous pouvez même enregistrer votre pile de répertoires dans un fichier et la restaurer plus tard.
Enregistrer:
dirs -S ~/dirstack
Restaurer:
dirs -L ~/dirstack
Sinon, remplacez simplement ~
dans les exemples bash
avec =
à utiliser dans tcsh
.
pushd =2 popd =4 popd +1
Réponse
Je lutilise comme ça dans mon bash_profile et .bashrc comme ça
vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq
il aide Je saute entre les répertoires les plus récents utilisés sur mon terminal. 🙂 Jespère que cela vous aidera à utiliser pushd plutôt que popd Jutilise cd ~ stackednumber
cd -
, des alias pour raccourcircd ..
, etc.).pushd
&popd
dans les scripts car ils mévitent de me souvenir doù je venais, je peux toujours simplementpopd
revenir de où je suis venu. Je fais généralementpopd >/dev/null 2>&1
pour le rendre silencieux. Jutilise cd- tous les jours dans mon shell. Cet article contient également dautres astuces pour gagner du temps: thegeekstuff.com/2008/10/… .cd -
ne suit que le dernier répertoire, jimagine quil le ferait être possible davoir des problèmes si vous appelez une fonction qui change également de répertoire en interne. dans ce cas, la fonction finirait par se réinitialiser – dans votre répertoire actuel, pas dans le répertoire dans lequel vous souhaitez revenir. pushd / popd est la méthode la plus sûre. Remarque: je nai ‘ pas testé ma théorie.~/somedir/dir3
après le premierpopd
?