Gibt es eine Möglichkeit, einen mvBefehl 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
Gibt es eine Möglichkeit, einen mvBefehl 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
Antworten:
Sie können die Klammererweiterung von bash verwenden. Dies:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
wird erweitert in:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
und dann mvwird mit diesen beiden Argumenten ausgeführt. Weitere Informationen zur Klammererweiterung finden Sie unter http://wiki.bash-hackers.org/syntax/expansion/brace .
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 bezieht Sie können die Erweiterung mit einer sed-ähnlichen s/pattern/replacementSyntax ersetzen, z
somecommand path/to/foo.bar !#$:s/.bar/.baz
Ex.
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
Wenn Sie den Pfad speziell festlegen möchten (z. B. zu mveiner Datei mit einem völlig anderen Namen, der nicht einfach durch Ersetzen abgerufen werden kann), können Sie den hModifikator verwenden:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
Weitere Optionen, einschließlich readlineTastenkombinationen zum Ziehen des letzten Arguments, finden Sie unter Wiederholen der aktuell in der Bash-Konsole eingegebenen Parameter.
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bzIn einer Zeile: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cdin das Verzeichnis wechseln, in dem Sie arbeiten möchten:cd ./really/long/pathmv foo.bar foo.bzIn einer Zeile: cd ./really/long/path && mv foo.bar foo.bz
&&in diesem letzten Einzeiler verwenden. Andernfalls wird das cdProgramm mvim falschen Verzeichnis ausgeführt und möglicherweise eine Datei überschrieben. Mit cd ./really/long/path && mv foo.bar foo.baz, mvwird nur ausgeführt, wenn der cdVerzeichniswechsel erfolgreich ist.
cdin das Verzeichnis undmvvon dort aus?