Esiste un modo per eseguire un mvcomando senza digitare il percorso completo nel secondo argomento?
Esempio:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
Esiste un modo per eseguire un mvcomando senza digitare il percorso completo nel secondo argomento?
Esempio:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
Risposte:
Puoi usare l'espansione del rinforzo di bash. Questo:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
si espanderà in:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
e quindi mvviene eseguito con questi due argomenti. Vedi http://wiki.bash-hackers.org/syntax/expansion/brace per ulteriori informazioni sull'espansione del controvento.
In alternativa all'espansione del controvento, è possibile utilizzare le funzionalità di espansione della cronologia della shell bash :
! introduce un'espansione della storia# designatore di eventi che indica il comando corrente$ designatore di parole riferito all'ultimo argomento È possibile eseguire sostituzioni sull'espansione usando una s/pattern/replacementsintassi simile a sed ad es
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'
Se si desidera specificamente il percorso (ad esempio, a mvun file con un nome completamente diverso che non è facilmente ottenibile per sostituzione), è possibile utilizzare il hmodificatore:
$ 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'
Per le altre opzioni, tra cui readlinecombinazioni di tasti per Yank l'ultimo argomento, vedere come ripetere attualmente digitato parametro su console bash?
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bzIn una riga: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cdaccedere alla directory in cui vuoi lavorare:cd ./really/long/pathmv foo.bar foo.bzIn una riga: cd ./really/long/path && mv foo.bar foo.bz
&&in quell'ultimo one-liner. Altrimenti, se cdfallisce, mvverrà eseguito nella directory sbagliata, sovrascrivendo potenzialmente un file. Con cd ./really/long/path && mv foo.bar foo.baz, mvverrà eseguito solo se cdriesce a cambiare directory.
cdaccedere alla directory emvda lì?