Befehlszeilenverknüpfung für aktuelles Verzeichnis ähnlich wie ~ für Home-Verzeichnis?

23

Wenn ich den Befehl cp oder move in einem Terminalfenster verwende, bin ich derzeit mit Bash in einem bestimmten Ordner wie diesem.

NES@server:~/Desktop/dir1$

Und jetzt möchte ich eine Datei von hier ~/anotherdir/dir2in den aktuell ausgewählten Ordner in Bash (Dir1) kopieren. Ich würde den Befehl verwenden

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

Gibt es eine Verknüpfung, die auf das aktuell ausgewählte Verzeichnis verweist? Damit ich in diesem Beispiel nicht den vollständigen Pfad zum Zielverzeichnis angeben muss, aber der Befehl weiß, dass das aktuell ausgewählte Verzeichnis in bash verwendet werden soll? dh wie steht ~ für das Heimatverzeichnis?

NES
quelle

Antworten:

41

Ihr aktuelles Verzeichnis ist .. Also, cp /foo/fam/foo .kopiert die Datei in dem aktuellen Verzeichnis.

Die analoge Konstruktion für "one directory up" oder das übergeordnete Verzeichnis Ihres aktuellen Arbeitsverzeichnisses besteht aus zwei Punkten, d ... H. (Danke @djeikyb.)

Also, von /usr/house/firstfloor/basementCD ..bringt Sie eine Ebene nach oben /usr/house/firstfloor.

Im selben Beispiel (beginnend mit /usr/house/firstfloor/basement, würde der Befehl cd ../..Sie zu führen /usr/house.

Sie können auch $PWDmit verwenden echo, um Ihr aktuelles Verzeichnis abzurufen:

echo $PWD

Im Übrigen $OLDPWDgeben Sie Ihr vorheriges Verzeichnis an. (Was bashSie auch durch Tippen erreichen können cd -.)

belacqua
quelle
3
Eine gute Zeit, um zu lernen, dass ..ein Verzeichnis niedriger bedeutet. Kann mehrfach verwendet werden, dhcd ../..
djeikyb
1
@djeikyb - du meintest oben, ich bin sicher. Cd ..bringt Sie also in das übergeordnete Verzeichnis Ihres aktuellen Verzeichnisses. Guter Punkt.
Belacqua
1
Und ich würde erwähnen popdund , pushdaber das ist in einem Aufsatz drehen.
Belacqua
2
Ein kleiner Unterschied zu erinnern: .und ..ist auf Dateisystemebene, so dass jedes Programm wird sich akzeptieren. Auf der anderen Seite sind Verknüpfungen wie ~und ~-Teil der Shell.
Grawity
2
+1 für cd -; Ich wusste nicht, dass es existiert.
jg-faustus
6

Sie können $ (pwd) verwenden. Es wird in die Ausgabe des Befehls pwd aufgelöst.

Beispiel:

echo $(pwd)
João Pinto
quelle
1
Oder einfach echo $PWD.
ulidtko
3

./ steht für das aktuelle Verzeichnis. So können Sie Befehl verwenden cp ~/anotherdir/dir2/file ./Dies kopiert die Datei "Datei" in das richtige Arbeitsverzeichnis.

binW
quelle
3
Sie brauchen den Schrägstrich "." Nicht. ist auch genug. Ein Schrägstrich (als Pfadkomponententrennzeichen) wird nur benötigt, wenn Sie eine andere Pfadkomponente dahinter setzen möchten, aber es ist dann einfacher, nur ./ zu verlassen, da relative Pfade ohnehin mit dem aktuellen Verzeichnis beginnen sollen :)
LGB
Ich weiß / ist nicht erforderlich, aber. allein fühlt sich für mich verwirrend an, coz. Dient auch zum Ausführen von Befehlen aus einer Datei in der aktuellen Shell, z. B. ". envsetup.sh". Das Hinzufügen eines / am Ende macht es also nur klarer.
BinW
1
Wenn Sie ln -s /some/long/path/to/get/to/cake kein zweites Argument angeben, wird der cakesymbolische Link tangential direkt in Ihren aktuellen eingefügt. Sehr gut für die Faulen. Speichert a ..
Belacqua
2

Um das aktuelle Verzeichnis als Zielverzeichnis zu verwenden, verwenden Sie einen einzelnen Punkt ' .'.

Lange Antwort

Mit Ihrem Beispiel würden Sie Folgendes eingeben: cp ~/anotherdir/dir2/file .

Um zu sehen , den Punkt ., ..und ../../Verzeichnisnamen in Aktion, kopieren und fügen Sie die folgenden Befehle in Ihr 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

Die Ausgabe des Befehls tree sieht folgendermaßen aus:

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

3 directories, 3 files

Die .Ausgabe oben in der Baumstruktur stellt das neue aktuelle Verzeichnis dar a , zu dessen Großeltern a/b/cwir mit dem cd ../../Befehl navigiert sind . Darunter asehen wir die Unterverzeichnisse a/b, a/b/cunda/b/c2

Zeile für Zeile Analyse

Zuerst haben wir 4 Verzeichnisse in einer Zeile erstellt, indem wir &&mehrere Zeilen miteinander verbunden haben.

Dann haben wir in das Verzeichnis gewechselt a/b/c, das das aktuelle Verzeichnis für die folgenden Kopierbefehle ist:

  • Im ersten Kopierbefehl ( cp) setzen wir das Ziel mit auf unser aktuelles Verzeichnis ( c ) ..
  • Im zweiten Kopierbefehl setzen wir das Ziel mit auf das übergeordnete Verzeichnis ( b ) ...
  • Im dritten Kopierbefehl setzen wir das Ziel mit auf das Geschwisterverzeichnis ( c2 )../c2

Dann haben wir, wie bereits erwähnt, das aktuelle Verzeichnis in geändert aund den treeBefehl ausgeführt, um alle Verzeichnisse und Dateien unter anzuzeigen a.

Aufräumen

Nachdem wir fertig sind, entfernen wir die drei Verzeichnisse und Dateien mit:

cd ~/
rm -r tree
WinEunuuchs2Unix
quelle
1

Sie können den Punkt ( .), die ~+ Tilde-Erweiterung , den pwdBefehl oder die Variable $ PWD verwenden, um das aktuelle Arbeitsverzeichnis (CWD) darzustellen. All diese Befehle können das tun:

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

Ja (wie bereits erwähnt), das aktuelle Verzeichnis ist ".". Aus diesem Grund können Sie Programme / Skripte aus dem aktuellen Verzeichnis mit "./script" starten (nur Skripte funktionieren nicht, wenn. Nicht Teil von PATH ist, was nicht empfohlen wird obwohl). Die Verwendung von $ PWD oder $ (pwd) ist ein bisschen übertrieben, auch wenn andere erwähnt haben, dass die Verwendung eines einzelnen Punkts mit Sicherheit kürzer ist :) ".." ist das übergeordnete Verzeichnis, mit Sicherheit ist "/" das Stammverzeichnis. Es ist auch schön zu erwähnen, dass "cd -" Sie in das vorherige Verzeichnis versetzt, in dem Sie sich befanden, bevor Sie cwd (aktuelles Arbeitsverzeichnis) geändert haben. Es kann auch bei der täglichen Arbeit nützlich sein. Ein einzelner "cd" -Befehl ohne einen anderen in der Befehlszeile versetzt Sie in "~" (Ihr Zuhause).

LGB
quelle
1
$PWDist kein Overkill beim Erstellen von Symlinks zu absoluten Pfaden.
ulidtko
Ich dachte an das "cp" -Beispiel, in dem es sich auf jeden Fall befindet. Auch bei Symlinks kommt es auf die Situation an: "ln -s / this / file." erstellt einen Symlink in dem aktuellen Verzeichnis, das auf die Datei / this / file mit dem Namen "file" verweist (die Leute denken oft, es sei wie bei "cp", kopieren Sie einfach keine Daten, nur eine Art Link: Es ist keine korrekte Definition, aber ein guter Anfang ). Die gegenteilige Konstruktion: "ln -s. / This / dir" ist etwas interessant (erstelle einen Symlink, da / this / dir auf das aktuelle Verzeichnis verweist), aber ich denke, es liegt außerhalb des Rahmens des ursprünglichen Themas. und es war auch nicht die Frage.
LGB