804

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?

N.N.
  • 18,219

7 Answers7

1037
mv /home/user/oldname /home/user/newname
  • 4
    Related http://www.brighthub.com/computing/linux/articles/20667.aspx – N.N. Aug 08 '11 at 17:23
  • Cool article. That's exactly the point. – Rafał Cieślak Aug 09 '11 at 09:02
  • 103
    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 '14 at 04: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 05 '14 at 16:30
  • 14
    @cxrodgers: pass --no-target-directory (-T), to avoid treating newname as a target directory. – jfs Dec 07 '16 at 04:52
  • @jfs: I've been wondering what that option meant for a long time, as the --help description isn't particularly useful. Glad to finally know. – drmuelr Jun 29 '18 at 17:18
  • It doesn't work if you want to capitalize a folder on a case-insensitive filesystem (likely on MacOS). mv $PWD/analisys $PWD/Analisys results in mv: cannot move '/Users/sixtykeys/Projects/murphy/tmp/analisys' to a subdirectory of itself, '/Users/sixtykeys/Projects/murphy/tmp/Analisys/analisys' – acorello Feb 13 '19 at 13:08
  • The “target directory_” on the man page means “_the directory into which files will be copied.” As @jfs said, you don’t want to copy into a directory in this case; always use --no-target-directory for safety. – Константин Ван Mar 29 '23 at 09:10
  • Is there any special reason you used full (absolute) pathnames? – PJ Brunet May 21 '23 at 03:14
  • You can use mv /home/user/oldname/* /home/user/newname if newname already exists. This will move the contents of oldname into the already created newname directory. – Anm Oct 24 '23 at 04:09
160

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.

Zanna
  • 70,465
shadi
  • 1,609
  • 1
  • 10
  • 2
58
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?

bmaupin
  • 4,930
  • 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 '19 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 '19 at 13:47
  • did you try this? – Mahmoud S. Marwad Jul 21 '19 at 14:12
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
Matt P
  • 121
  • 1
  • 2
6

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

gvfs-move /home/user/oldname /home/user/newname
Avinash Raj
  • 78,556
5

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.

thebunnyrules
  • 1,083
  • 1
  • 13
  • 20
0

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

Done!

koni_raid
  • 3,310