I have got the directory /home/user/oldname and I want to rename it to /home/user/newname. How can I do this in a terminal?

  • See also: How to move a directory
    – kenorb
    Sep 19, 2014 at 22:36
  • Use always mv or rename. Jul 1, 2016 at 20:11
  • 1
    use mv and don't use / in end. Because your content will go inside it.
    – Tamil
    Nov 7, 2020 at 8:08

7 Answers 7

mv /home/user/oldname /home/user/newname
  • 4
    Related brighthub.com/computing/linux/articles/20667.aspx
    – N.N.
    Aug 8, 2011 at 17:23
  • Cool article. That's exactly the point. Aug 9, 2011 at 9:02
  • 102
    This will not work if the new name is already an existing directory. Instead, it will move the old directory inside the new one.
    – cxrodgers
    Apr 17, 2014 at 4:56
  • 10
    If the directory name is the same with capitalization you will get No such file or directory. To avoid this do something like mv /home/user/Folder /home/user/temp; mv /home/user/temp/ /home/user/folder.
    – DutGRIFF
    Dec 5, 2014 at 16:30
  • 14
    @cxrodgers: pass --no-target-directory (-T), to avoid treating newname as a target directory.
    – jfs
    Dec 7, 2016 at 4:52

mv can do two jobs.

  1. It can move files or directories
  2. It can rename files or directories

To just rename a file or directory type this in Terminal:

mv old_name new_name

with space between the old and new names.

To move a file or directory type this in Terminal.

mv file_name ~/Desktop

it will move the file to the desktop.

mv -T /home/user/oldname /home/user/newname

That will rename the directory if the destination doesn't exist or if it exists but it's empty. Otherwise it will give you an error.

If you do this instead:

mv /home/user/oldname /home/user/newname

One of two things will happen:

  • If /home/user/newname doesn't exist, it will rename /home/user/oldname to /home/user/newname
  • If /home/user/newname exists, it will move /home/user/oldname into /home/user/newname, i.e. /home/user/newname/oldname

Source: How to decide that mv moves into a directory rather than replacing directory?

  • Doesn't work if you want to capitalize the directory name in a case-insensitive filesystem (likely on MacOS). mv -T $PWD/analisys $PWD/Analisys returns mv: '/Users/sixtykeys/Projects/murphy/tmp/analisys' and '/Users/sixtykeys/Projects/murphy/tmp/Analisys' are the same file. I worked around this by using an intermediate name (i.e. analisys_).
    – acorello
    Feb 13, 2019 at 13:12
  • The command may not have been successful due to the limitations of the filesystem, but from another perspective it was successful in interpreting your intentions (renaming a directory, not moving it) :)
    – bmaupin
    Feb 13, 2019 at 13:47
  • did you try this? Jul 21, 2019 at 14:12

If you want to rename a directory at your level in the file system (e.g., you are at your home directory and want to rename a directory that is also in your home directory):

mv Directory ./NewNameDirectory

This gvfs-move command will also rename files and directories.

gvfs-move /home/user/oldname /home/user/newname

gvfs-rename will rename directories as well. It will give an error if a directory with the new name already exists. The only limitation is that you can't use a path with the folder name. So

gvfs-rename /home/boo /home/boo-the-dog 

will not work, but

cd /home 
gvfs-rename boo boo-the-dog 

will work. Not as useful as mv -T but I read in the man that it was meant for network operations.


My preferred method is using: vidir because I love vi

Install moreutils

sudo apt update; sudo apt install moreutils

Call command vidir in your home-directory

vidir ~

Now search for the directory to change, using slash / e.g. /oldname make the changes, then press = ESC type :wq


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .