The Unix mv command

The mv command moves or renames a file. There are several forms of the mv command

mv filename1 filename2

Renames the file named filename1 to filename2. For example:

   linux1% ls
   cs104  joke  Mail  OtherStuff  www

   linux1% mv joke my_joke
 
   linux1% ls
   cs104  Mail  my_joke  OtherStuff  www
   

Be careful using the mv command. If filename2 already exists, then it is deleted!

   linux1% ls
   cs104  joke1  joke2  Mail  OtherStuff  www

   linux1% mv joke1 joke2

   linux1% ls
   cs104  joke2  Mail  OtherStuff  www
   

In the example above, the file originally named joke1 becomes joke2. The original joke2 is gone forever.

mv filename directory

In this version of mv, the specified file is moved into the specified directory and keeps its file name:

   linux1% ls cs104
   hw01  hw02  hw03

   linux1% mv joke cs104

   linux1% ls cs104
   hw01  hw02  hw03  joke
   

This use of the mv can be confusing if the specified directory does not exist. Then, it becomes the first form of the mv command and the file is given the name of the 'directory' (which doesn't exist), instead of being moved inside the 'directory' (which can't happen, because there is no such directory). For example:

   linux1% ls
   cs104  joke  Mail  OtherStuff  www

   linux1% mv joke hw01

   linux1% ls
   cs104  hw01  Mail  OtherStuff  www

   linux1% ls -l hw01
   -rw------- 1 chang faculty 60 Sep  9 12:24 hw01

   linux1% ls hw01
   hw01
   

In the example above, there is no hw01 directory in the current directory. So, the mv command simply renames joke into hw01. Notice that the listing shows that after hw01 is created, it is an ordinary file, not a directory. This is especially confusing if you thought (erroneously) that there was a directory called hw01.

This sort of mistake can be avoided by including a backslash '/' at the end of the directory name:

   linux1% ls
   cs104  joke1  joke2  Mail  OtherStuff  www

   linux1% mv joke1 cs104/

   linux1% ls
   cs104  joke2  Mail  OtherStuff  www

   linux1% ls cs104
   hw01  hw02  hw03  joke1

   linux1% mv joke2 hw01/
   mv: cannot move `joke2' to `hw01/': Not a directory
   

The last mv command resulted in an error and does not rename joke2 into hw01.

mv filename1 filename2 filename3 ... directory

This form of the mv command moves several files into the specified directory. (The directory is always the last filename given.) In the following example, the files joke1, joke2 and joke3 are moved into the cs104 directory:

   linux1% ls
   cs104  joke1  joke2  joke3  Mail  OtherStuff  www

   linux1% ls cs104
   hw01  hw02  hw03

   linux1% mv joke1 joke2 joke3 cs104/

   linux1% ls cs104
   hw01  hw02  hw03  joke1  joke2  joke3