Gelegentlich habe ich eine Datei bearbeitet und möchte sie in einen anderen Ordner verschieben. (Normalerweise: in einen Dropbox-Ordner, in dem ich nicht arbeiten wollte, um zu vermeiden, dass die anderen Besitzer des Ordners ständig aktualisiert werden.) Ich mache dies zum Beispiel mit
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
Danach möchte ich häufig das Verzeichnis in das Zielverzeichnis meiner vorherigen Verschiebeoperation ändern. Ich tippe auf den Aufwärtspfeil, lösche das Finale file.pdf
, halte links, lösche mv file.pdf
und ersetze es durch cd
.
Gibt es eine schnellere und intelligentere Möglichkeit, dies zu tun? Gibt es einen Befehl "Datei verschieben und dann Verzeichnis wechseln in" oder eine Verknüpfung für das zuletzt verwendete Verzeichnis oder ähnliches?
command-line
mv
Mees de Vries
quelle
quelle
Antworten:
Wenn Sie bash verwenden, hat die Verlaufsinteraktion nur die Abkürzung dafür. Der Wortbezeichner für das letzte Argument des vorherigen Befehls:
Kombiniert mit einem Modifikator , um die letzte Pfadname-Komponente zu entfernen:
Nach dem optionalen Wortbezeichner können Sie eine Folge von einem oder mehreren gültigen Modifikatoren hinzufügen , denen jeweils ein ':' vorangestellt ist.
So:
Dieselbe Verknüpfung kann auch mit zsh verwendet werden.
quelle
Wenn Sie den Dateinamen nicht ändern, können Sie ihn weglassen, und mv fügt ihn automatisch hinzu. Dies ist besonders nützlich, wenn Sie mehrere Dateien verschieben:
Mit dem Verzeichnis als letztes Argument können Sie
!!:$
oder!$
als Antwort des Murus beschreiben.Wenn Sie bash mit den üblichen Standardeinstellungen verwenden, können Sie stattdessen Alt+ .verwenden.
(Dies ist der
insert-last-argument
Befehl readline ;bind -p
listet alle Ihre aktuellen Bindungen auf.)quelle
mv
Überschreibt Zieldateien immer unbemerkt, es sei denn, Sie geben die Optionen-i
/--interactive
oder-n
/ an--no-clobber
. Deshalb habe ichalias mv='mv -i' cp='cp -i'
in meinem.bashrc
.Ein weiterer Ansatz besteht darin, einen eigenen Befehl für diesen Zweck zu erstellen. Dies kann über eine Funktion erfolgen, die wie folgt aussehen könnte:
Wobei: (1)
mv-special
der Funktionsname ist; (2) die Variablen$1
und$2
sind Argumente in der Funktion, die von den Befehlenmv
und verwendet werdencd
; (3)$(echo $2-)
Fügt am Ende der Zeichenfolge in var ein Wildcat-Zeichen hinzu$2
und korrigiert das Verhalten,dirname
wenn die Variable$2
nur path enthält. (4)$(dirname $(echo $2-))
filtert nur den Pfad von$2
.Nach dieser Antwort könnte die Funktion so aussehen:
Wo:
${2%/*}
filtert nur den Pfad von$2
.Um als Befehl verfügbar zu sein, muss diese Funktion vorhanden sein exportiert werden :
Verwendung:
oder:
Bitte beachten Sie, dass für beide Varianten das zweite Argument (
$2
) mit Dateiname oder Schrägstrich (/
) enden muss .Damit unser neuer Befehl dauerhaft verfügbar ist, müssen die Definition der Funktion und der Exportbefehl an Folgendes angehängt werden
~/.bashrc
:oder:
Ein benutzerdefinierter Befehl kann über eine ausführbare Skriptdatei erstellt werden, die sich in
~/bin
oder in befindet/usr/sbin
: Wie kann ich einen benutzerdefinierten Terminalbefehl erstellen (um ein Skript auszuführen)? Aber um ehrlich zu sein, hatte ich Probleme mit dem Verhaltencd
in diesem Szenario.quelle