Raccourci de ligne de commande pour le répertoire actuel similaire à ~ pour le répertoire personnel?


24

Lorsque j'utilise la commande cp ou move dans une fenêtre de terminal, je suis actuellement avec bash dans un certain dossier comme celui-ci.

NES@server:~/Desktop/dir1$

Et maintenant, je veux copier un fichier d'ici ~/anotherdir/dir2dans le dossier choisi en bash (dir1), j'utiliserais la commande

cp ~/anotherdir/dir2/file ~/Desktop/dir1

existe-t-il une chaîne de raccourcis pour faire référence au répertoire actuellement sélectionné? De sorte que dans cet exemple, je n'ai pas à fournir le chemin d'accès complet au répertoire cible, mais la commande sait qu'elle doit utiliser le répertoire actuellement sélectionné dans bash? c'est-à-dire que ~ représente le répertoire personnel?

Réponses:


42

Votre répertoire actuel est .. Copiez donc cp /foo/fam/foo .le fichier dans votre répertoire actuel.

La construction analogue pour "un répertoire vers le haut", ou le répertoire parent de votre répertoire de travail actuel, est de deux points, c'est-à-dire ... (Merci @djeikyb.)

Donc, à partir de /usr/house/firstfloor/basement, cd ..vous amène à un niveau /usr/house/firstfloor.

Dans le même exemple (à partir de /usr/house/firstfloor/basement, la commande vous cd ../..amènerait à /usr/house.

Vous pouvez également utiliser $PWDavec echopour obtenir votre répertoire actuel:

echo $PWD

Soit dit en passant, $OLDPWDvous donnera votre répertoire précédent. (Ce que bashvous pouvez également atteindre en tapant cd -.)


3
Bon moment pour apprendre, cela ..signifie un répertoire plus bas. Peut être utilisé plusieurs fois, c'estcd ../..
djeikyb

1
@djeikyb - vous vouliez dire ci-dessus, j'en suis sûr. Ainsi, cd vous ..amènera au répertoire parent de votre répertoire actuel. Bon point.
belacqua

1
Et je mentionnerais popdet pushdmais cela se transforme en essai.
belacqua

2
Une petite différence à retenir: .et ..sont au niveau du système de fichiers, donc tout programme les acceptera. D'un autre côté, des raccourcis tels que ~et ~-font partie du shell.
grawity

2
+1 pour cd -; ne savait pas qu'il existait.
jg-faustus

6

Vous pouvez utiliser $ (pwd), il résoudra la sortie de la commande pwd.

Exemple:

echo $(pwd)

1
Ou tout simplement echo $PWD.
ulidtko

3

./ représente le répertoire courant. Vous pouvez donc utiliser la commande cp ~/anotherdir/dir2/file ./Cela copiera le fichier "fichier" dans le répertoire de travail actuel.


3
Vous n'avez pas besoin de la barre oblique, "." c'est assez aussi. la barre oblique (en tant que délimiteur de composant de chemin) n'est nécessaire que si vous souhaitez placer un autre composant de chemin après, mais il est plus facile de simplement quitter ./ car les chemins relatifs sont de toute façon censés commencer par le répertoire courant :)
LGB

je sais / n'est pas requis mais. seul me semble confus car coz. est également utilisé pour exécuter des commandes à partir d'un fichier dans le shell actuel, par exemple ". envsetup.sh". Donc, ajouter un / à la fin le rend plus clair.
binW

1
Tangentiellement, si vous ne le faites ln -s /some/long/path/to/get/to/cake pas sans second argument , cela mettra cakedirectement le lien symbolique dans votre courant. Très bon pour les paresseux. Enregistre a ..
belacqua

2

Pour utiliser le répertoire actuel comme répertoire de destination, utilisez un seul point ' .'

Longue réponse

En utilisant votre exemple, vous taperiez: cp ~/anotherdir/dir2/file .

Pour voir le point ., ..et les ../../noms de répertoire en action, copiez et collez les commandes suivantes dans votre terminal:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

La sortie de la commande tree apparaît comme ceci:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

La .sortie en haut de l'arborescence représente le nouveau répertoire courant a qui est le grand-parent a/b/cdont nous avons accédé à l'aide de la cd ../../commande. En dessous, anous voyons les sous-répertoires a/b, a/b/ceta/b/c2

Analyse ligne par ligne

Nous avons d'abord créé 4 répertoires sur une ligne en utilisant &&pour joindre plusieurs lignes ensemble.

Ensuite, nous avons changé pour le répertoire a/b/c, qui est le répertoire actuel pour les commandes de copie suivantes:

  • Dans la première commande de copie ( cp), nous définissons la destination sur notre répertoire actuel ( c ) avec ..
  • Dans la deuxième commande de copie, nous définissons la destination sur le répertoire parent ( b ) avec ...
  • Dans la troisième commande de copie, nous définissons la destination sur le répertoire frère ( c2 ) avec../c2

Ensuite, comme indiqué précédemment, nous avons changé le répertoire actuel en aet avons exécuté la treecommande pour afficher tous les répertoires et fichiers sous a.

Nettoyer

Une fois que nous avons terminé, nous supprimons les trois répertoires et fichiers avec:

cd ~/
rm -r tree


1

Vous pouvez utiliser le point ( .), l' ~+ expansion tilde , la pwdcommande ou la variable $ PWD pour représenter le répertoire de travail actuel (CWD). Toutes ces commandes peuvent le faire:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

Oui (comme d'autres l'ont noté), le répertoire courant est ".", C'est pourquoi vous pouvez démarrer des programmes / scripts à partir du répertoire courant avec ./script (le script ne fonctionnera que si. N'est pas la partie de PATH, ce qui n'est pas recommandé bien que). Utiliser $ PWD ou $ (pwd) est un peu exagéré, même si d'autres ont mentionné que l'utilisation d'un seul caractère point est plus courte, c'est sûr :) ".." est le répertoire parent, bien sûr "/" est la racine. Aussi agréable de mentionner que "cd -" vous mettra dans le répertoire précédent où vous étiez avant de changer cwd (répertoire de travail actuel). Il peut également être utile dans le travail quotidien. Une seule commande "cd" sans aucune autre dans la ligne de commande vous mettra dans "~" (votre maison).


1
$PWDn'est pas exagéré lors de la création de liens symboliques vers des chemins absolus.
ulidtko

J'ai pensé à l'exemple "cp" où il se trouve, c'est sûr. Même avec des liens symboliques, cela dépend de la situation: "ln -s / this / file". créera un lien symbolique dans le répertoire courant pointant le fichier / this / file avec le nom "file" (les gens pensent souvent que c'est comme avec "cp" ne copient pas les données, seulement une sorte de lien: ce n'est pas une définition correcte mais c'est un bon début ). Cependant, la construction opposée: "ln -s. / This / dir" est quelque peu intéressante (créer un lien symbolique comme / this / dir avec des références pour le répertoire courant), mais je pense que cela sort du cadre du sujet d'origine, et ce n'était pas la question non plus.
LGB
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.