Is it possible to name a part of a command to reuse it in the same command later on?
You could do this:
mv /longpath/longfile !#:1:h/morepath/
See https://www.gnu.org/software/bash/manual/bashref.html#History-Interaction
!#
is the current command:1
is the first argument in this command:h
is the "head" -- thinkdirname
/morepath/
appends that to the head- and you're moving a file to a directory, so it keeps the same basename.
If you want to alter the "longfile" name, say add a ".txt" extension, you could
mv /longpath/longfile !#:1:h/morepath/!#:1:t.txt
Personally, I would cut and paste with my mouse. In practice I never get much more complicated than !!
or !$
or !!:gs/foo/bar/
You could also do this with brace expansion:
mv /longpath/{,morepath/}longfile
The shell expands this so that the mv
command sees it the same as:
mv /longpath/longfile /longpath/morepath/longfile
If you are for more efficient typing in command line, you may find various readline shortcut useful. Readline is already built-in your shell. For your paricular case you could yank/delete parts of your line and then recall them from readline killiring.
Moreover, if you have EDITOR environmnent variable set to your favorite editor, then Ctrl-X,Ctrl-E will copy your current command line into editor window where you can have all the editor power to modify your line. Once completed, you save/exit from the editor and the line gets executed in your shell.