Angenommen, ich besuche in Bash ein Verzeichnis und dann ein anderes Verzeichnis. Ich möchte eine Datei aus dem ersten Verzeichnis in das zweite Verzeichnis kopieren, ohne jedoch deren lange Pfadnamen anzugeben. Ist es möglich?
Meine vorübergehende Lösung besteht darin /tmp
, eine Kopie der Datei als temporären Speicherort zu verwenden. cp myfile /tmp
Wenn ich im ersten Verzeichnis und dann cp /tmp/myfile .
im zweiten Verzeichnis bin. Ich kann aber prüfen, ob die Datei irgendetwas überschreibt /tmp
.
Gibt es etwas Ähnliches wie eine Zwischenablage zum Kopieren und Einfügen einer Datei?
cd
Befehl, so können Sie einfachcd -
auf das vorherige Verzeichnis zurück zu gehen, up-Pfeil , um das wieder zucd
Befehl, und bearbeiten Sie die Zeile seincp
stattcd
. (Strg-a (Zeilenanfang), Alt-d (cp -a
Abschusswort ) , Strg-e (Zeilenende)).M-x term
Sie die Zwischenablage von Emacs verwenden.Antworten:
Mit Bash würde ich nur die Verzeichnisse besuchen:
Dann würde ich die Verknüpfung verwenden
~-
, die auf das vorherige Verzeichnis verweist:Wenn man Verzeichnisse in umgekehrter Reihenfolge besuchen möchte, dann:
quelle
"$OLDPWD"
. Warum aber drei getrenntecp
Befehle?cp -a ~-/file[1-3].txt .
cp
Beispiele. In der Praxis können auch Platzhalterzeichen verwendet werden, um die Kopieraufgabe zu vereinfachen.pushd
und das Parsen erwähnendirs
... aber das ist weit, weit besser. Ich schlage vor, Sie fügen die Tatsache,"$OLDPWD"
die genau gleichwertig ist~-
und portabler ist (hilfreich für diejenigen, die nicht verwendenbash
.)~+
ist ebenfalls eine Abkürzung für"$PWD"
Wenn ich diese Situation einmalig sehen würde, könnte ich:
Wenn es Verzeichnisse gäbe, in die ich Dateien halbjährlich kopiert habe, würde ich wahrscheinlich in meinem .profile einige mnemonische Variablen für sie definieren.
Bearbeitet, um hinzuzufügen:
Nachdem ich darauf geschlafen hatte, fragte ich mich, wie weit ich mit anderen GUI / OS-Verhaltensweisen kommen könnte, bei denen Sie eine bestimmte Anzahl von Dateien auswählen, ausschneiden oder kopieren und sie dann an einer anderen Stelle einfügen. Der beste Auswahlmechanismus, den ich finden konnte, war Ihr Gehirn / Ihre Vorlieben sowie die Globbing-Funktion der Shell. Ich bin nicht sehr kreativ im Benennen, aber dies ist die Grundidee (in Bash-Syntax):
Um es zu benutzen, legen Sie den Code in ~ / .bash_profile, dann
cd
in das Quellverzeichnis und führen Sie entwedercopyfiles glob*here
oder auscutfiles glob*here
. Alles, was passiert, ist, dass Ihre Shell die Globs erweitert und diese Dateinamen in ein Array einsetzt. Sie wechseln danncd
in das Zielverzeichnis und führen auspastefiles
, welchescp
für jede Quelldatei einen Befehl ausführt . Wenn Sie zuvor die Dateien "ausgeschnitten" hatten, werden durch Pastefiles auch die Quelldateien entfernt (oder versucht). Dies führt keine Fehlerüberprüfung durch (von vorhandenen Dateien, bevor diese möglicherweise mit dem gelöscht werdencp
; oder Sie haben die Berechtigung, die Dateien während eines "Ausschnitts" zu entfernen, oder Sie können nach dem Auszug erneut auf das Quellverzeichnis zugreifen davon).quelle
$OLDPWD
bereits vorhanden, die~-
in Bash und Zsh gekürzt werden kann .Ich denke, das
~-
ist die richtige Antwort, aber beachte, dass bash einen eingebauten Zeileneditor hat , der Text kopieren / einfügen kann.Wenn Sie in Emacs - Modus sind Sie erinnern
cd
Befehl aus der Geschichte, und die Verwendung Control-uzu töten die Linie in dem bash „Zwischenablage“ der Kill-Ring genannt (es gibt auch andere Möglichkeiten , auch). Sie können diesen String dann jederzeit mit in einen neuen Befehl ziehen Control-y. In Ihrem Beispiel hängt dies natürlich davon ab, dass Sie in Ihremcd
Befehl einen absoluten Verzeichnisnamen verwendet haben .Sie können auch die interessante Standardschlüsselbindung von verwenden Meta-.. Dadurch wird das letzte Wort des vorherigen Befehls in Ihre aktuelle Zeile kopiert . Wenn dies wiederholt wird, wird jedes Mal ein Befehl im Verlauf zurückgesetzt. Wenn Sie also eine machen
cd /x
, haben Sie ,cd /y
gefolgt voncd
Meta-.Meta-.,/x
Ihre Eingabe.quelle
Aufbauend auf die Antwort von Anderson M. Gomes , Bash können Sie durch Eingabe in Ihrem Verzeichnis Stack jede vorherige Verzeichnis beziehen
~N
(oder~+N
) , woN
ist die Position auf dem Richt - Stack. Beispielsweise:Jetzt können Sie eine Datei zwischen zwei früheren Verzeichnissen kopieren, von denen keines das aktuelle ist.
Um das Problem des ursprünglichen Posters zu lösen, gehen Sie wie folgt vor:
Bei einer großen Anzahl von Dateien können Sie deren Namen in einer Manifest-Datei auflisten und dann die Kopie aus dem Quellverzeichnis erstellen:
Siehe auch: dieser Abschnitt der Bash-Manpage
Ebenso können Sie in Tcsh die
=2
Notation (anstatt~2
) verwenden, um auf das zweite Verzeichnis in Ihrem Verzeichnisstapel zu verweisen.Siehe auch: dieser Abschnitt der Tcsh-Manpage
quelle
Wenn Sie sich im ersten Verzeichnis befinden, lassen Sie uns die Quelle sagen oder
src
kurz ausführendann
cd
in das zweite Verzeichnis und führe aus:Bei dieser
-i
Option werden Sie gefragt, ob Sie eine Datei überschreiben möchten, die doppelt vorhanden istquelle
Eine Variation der anderson-m-gomes-Reaktion. Mit Bash würde ich nur die Verzeichnisse besuchen:
Dann würde ich die Variable $ OLDPWD verwenden, die auf das vorherige Verzeichnis verweist:
Wenn man Verzeichnisse in umgekehrter Reihenfolge besuchen möchte, dann:
quelle
$OLDPWD
Leerzeichen enthalten sind, wird dies unterbrochen. Auch benutze ich immercp -a
. Es ist auch bedauerlich, dass die Tab-Vervollständigung bei variablen Erweiterungen unterbrochen wird. Sie können Strg-Alt-E verwenden, um die aktuelle Befehlszeile in der Shell zu erweitern, nachdem Sie den $ OLDPWD-Teil eingegeben haben.~-
ist eine Abkürzung für$OLDPWD
Wenn in Bash, würde ich Pushd und Popd verwenden . Diese Befehle speichern einen praktischen FIFO-Stapel von Verzeichnissen zur späteren Verwendung. Sie können den Stapel jederzeit mit dirs abrufen .
Als solches würde ich tun:
quelle
Sie können verwenden
xclip
:Beispiel:
Besuchen Sie auch xsel .
quelle
tar | gzip
in / aus der X-Zwischenablage. Etwas klobig im Vergleich zucp
und verallgemeinert sich nicht darauf, Symlinks oder Hardlinks zu erstellen. (cp -as
odercp -al
)Sie können das
clipboard-files
Skript hier überprüfen : https://github.com/larspontoppidan/clipboard-filesEs bietet Befehle wie
ccopy
,ccut
undcpaste
dass den Desktop - Umgebung Zwischenablage verwenden und erlaubt eine intuitive Kopieren / Einfügen von Dateien:Wenn die Zwischenablage der Desktop-Umgebung verwendet wird, interagiert das Kopieren / Einfügen mit den Dateien, die in anderen Programmen wie Dateimanagern und IDEs in der Zwischenablage abgelegt sind. Zumindest funktioniert es auf Gnome-ähnlichen Desktops.
Vollständige Offenlegung, ich habe das Drehbuch geschrieben, nachdem ich aufgehört hatte, so etwas zu finden ...
quelle