Gibt es eine Möglichkeit, einen mv
Befehl auszuführen, ohne den vollständigen Pfad im zweiten Argument einzugeben?
Beispiel:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
quelle
quelle
cd
in das Verzeichnis undmv
von dort aus?Antworten:
Sie können die Klammererweiterung von bash verwenden. Dies:
wird erweitert in:
und dann
mv
wird mit diesen beiden Argumenten ausgeführt. Weitere Informationen zur Klammererweiterung finden Sie unter http://wiki.bash-hackers.org/syntax/expansion/brace .quelle
Als Alternative zur geschweiften Erweiterung können Sie die History-Erweiterungsfunktionen der Bash-Shell verwenden :
!
führt eine Historienerweiterung ein#
Ereignisbezeichner, der den aktuellen Befehl angibt$
Wortbezeichner, der sich auf das letzte Argument beziehtSie können die Erweiterung mit einer sed-ähnlichen
s/pattern/replacement
Syntax ersetzen, zEx.
Wenn Sie den Pfad speziell festlegen möchten (z. B. zu
mv
einer Datei mit einem völlig anderen Namen, der nicht einfach durch Ersetzen abgerufen werden kann), können Sie denh
Modifikator verwenden:Weitere Optionen, einschließlich
readline
Tastenkombinationen zum Ziehen des letzten Arguments, finden Sie unter Wiederholen der aktuell in der Bash-Konsole eingegebenen Parameter.quelle
Sie könnten versuchen:
quelle
Mit einer Variablen
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
In einer Zeile:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Verzeichnis wechseln
cd
in das Verzeichnis wechseln, in dem Sie arbeiten möchten:cd ./really/long/path
mv foo.bar foo.bz
In einer Zeile:
cd ./really/long/path && mv foo.bar foo.bz
quelle
&&
in diesem letzten Einzeiler verwenden. Andernfalls wird dascd
Programmmv
im falschen Verzeichnis ausgeführt und möglicherweise eine Datei überschrieben. Mitcd ./really/long/path && mv foo.bar foo.baz
,mv
wird nur ausgeführt, wenn dercd
Verzeichniswechsel erfolgreich ist.Sie können den Alias-Befehl verwenden, um den Verzeichnisnamen zu verkürzen:
quelle
alias test='/var/log' ; cd test
gibt-bash: cd: test: No such file or directory
.