I know how to rename files in Unix:
$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh
^-------this part------^ ^------this part-------^
It takes too long time to repeat ~/folder/subfolder/file twice.
Is there a quicker way?
I know how to rename files in Unix:
$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh
^-------this part------^ ^------this part-------^
It takes too long time to repeat ~/folder/subfolder/file twice.
Is there a quicker way?
If your shell supported Brace Expansion (works with csh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh, yash with brace-expand enabled by calling yash --brace-expand or set in interative shell with set -o brace-expand, or fish):
mv ~/folder/subfolder/file.{txt,sh}
You can also use rename (part of the util-linux package).
rename .txt .sh ~/folder/subfolder/file.txt
See the rename man page for more details.
All the above are good. This would also work :
( cd ~/folder/subfolder && mv file.txt file.sh )
No. You need to give the full path to the file in order to rename it. The only alternative is to move into the target folder before running the mv:
cd ~/folder/subfolder/
mv file.txt file.sh
Alternatively, you could write a little function that renames the file in the target directory. For example, add these lines to your shell initialization file (~/.bashrc if you are using bash):
lmv(){
_path=$(dirname -- "$1")
_target="${_path%/}/$2"
mv -- "$1" "$_target"
}
Then, open a new terminal or just run source ~/.bashrc to re-read the init file and you can do:
lmv ~/folder/subfolder/file.txt file.sh
Just to expand the usefulness of cuonglm's answer (NOT to take any credit as I love his solution) and his answer is a correct one.
The use case is that we often want to mv a file in a remote location (the real issue), e.g. /folder/subfolder/configFile.dat TO configFile.dat.orig
This form of the command adds a file extension (not replacing the original extension)
mv ~/folder/subfolder/file.txt{,.orig}
Explained: "{,.orig}" means replace (nothing) on the end of the file name with (something) ".orig"
OR to remove a file extension (reverse the rename)
mv ~/folder/subfolder/file.txt{.orig,}
Note: Still on topic for "Quickest way to rename files without retyping the dir path"
Yes. If you use bash, you do sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd.
Which is actually bigger and may fail if you lost access permissions to the original directory when you did the popd.