mv vs cp

hi,

what is difference between mv vs cp

when we use which one. any advantage of using one over other

please advise
LVL 7
gudii9Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

arnoldCommented:
It is the difference between taking a page and moving from filing cabinet one to filing cabinet 2, versus taking a page from filing cabinet 1 going to a copier, copying the file, returning the page to filing cabinet and placing the copy in filing cabinet 2.

Depends on your need there.
Copy means the end result will be two copies of the file
Move the file will join longer be accessible in the old location.

There is no inherent value to one versus  the other.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Seth SimmonsSr. Systems AdministratorCommented:
what is difference between mv vs cp

mv - move
cp - copy
0
Hugh FraserConsultantCommented:
An apples to apples comparison would be to ask the difference between copying a file and removing the original vs moving a file since these produce the same result. In this case there can be some important differences.

First, moving a file (within the same filesystem) never actually moves the contents of the file itself; it simply moves the directory entry. For a large file, this is much faster.

Secondly, if the filesystemp doesn't have enough space for 2 copies of the file (needed before you remove the original), the copy simply isn't possible.

If the file's crossing filesystem, a move is the same as a copy and delete.
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

gudii9Author Commented:
Move the file will join longer be accessible in the old location.

you mean as below right?
Move the file will no longer be accessible in the old location.
0
gudii9Author Commented:
First, moving a file (within the same filesystem) never actually moves the contents of the file itself; it simply moves the directory entry. For a large file, this is much faster.
i am not clear on above. can you please elaborate?
0
gudii9Author Commented:
mv and cp can be applied to directories and files as well?
0
gudii9Author Commented:
just tested mv  as below on file
sh-4.4$ /bin/bash                                                                                                                                  
bash-4.4$ pwd                                                                                                                                      
/home/cg/root                                                                                                                                      
bash-4.4$ ls -ltr                                                                                                                                  
total 4                                                                                                                                            
-rw-r--r-- 1 14392 14392 978 Nov 22 16:46 README.txt                                                                                              
bash-4.4$ touch 123.txt                                                                                                                            
bash-4.4$ touch 456.txt                                                                                                                            
bash-4.4$ vi 123.txt                                                                                                                              
bash-4.4$ mv 123.txt 456.txt                                                                                                                      
bash-4.4$ ls -ltr                                                                                                                                  
total 8                                                                                                                                            
-rw-r--r-- 1 14392 14392 978 Nov 22 16:46 README.txt                                                                                              
-rw-r--r-- 1 14392 14392   7 Nov 22 16:47 456.txt                                                                                                  
bash-4.4$ vi 456.txt                                                                                                                              
                                                                                                                                                   
[1]+  Stopped                 vi 456.txt
0
gudii9Author Commented:
so mv is for renaming files and directories

i tested renaming directory as below

bash-4.4$ pwd                                                                                                                                      
/home/cg/root                                                                                                                                      
bash-4.4$ ls -ltr                                                                                                                                  
total 4                                                                                                                                            
-rw-r--r-- 1 14392 14392 978 Nov 22 16:46 README.txt                                                                                              
bash-4.4$ touch 123.txt                                                                                                                            
bash-4.4$ touch 456.txt                                                                                                                            
bash-4.4$ vi 123.txt                                                                                                                              
bash-4.4$ mv 123.txt 456.txt                                                                                                                      
bash-4.4$ ls -ltr                                                                                                                                  
total 8                                                                                                                                            
-rw-r--r-- 1 14392 14392 978 Nov 22 16:46 README.txt                                                                                              
-rw-r--r-- 1 14392 14392   7 Nov 22 16:47 456.txt                                                                                                  
bash-4.4$ vi 456.txt                                                                                                                              
                                                                                                                                                   
[1]+  Stopped                 vi 456.txt                                                                                                          
bash-4.4$ mkdir dir1                                                                                                                              
bash-4.4$ ls -ltr                                                                                                                                  
total 12                                                                                                                                          
-rw-r--r-- 1 14392 14392  978 Nov 22 16:46 README.txt                                                                                              
-rw-r--r-- 1 14392 14392    7 Nov 22 16:47 456.txt                                                                                                
drwxr-xr-x 2 14392 14392 4096 Nov 22 16:49 dir1                                                                                                    
bash-4.4$ mv dir dir2                                                                                                                              
mv: cannot stat 'dir': No such file or directory                                                                                                  
bash-4.4$ mv dir1 dir2                                                                                                                            
bash-4.4$ ls -ltr                                                                                                                                  
total 12                                                                                                                                          
-rw-r--r-- 1 14392 14392  978 Nov 22 16:46 README.txt                                                                                              
-rw-r--r-- 1 14392 14392    7 Nov 22 16:47 456.txt                                                                                                
drwxr-xr-x 2 14392 14392 4096 Nov 22 16:49 dir2                                                                                                    


as per this link
http://www.thegeekstuff.com/2010/12/mv-command-examples/
0
arnoldCommented:
mv is to move files or directories.
if you move a file or directory from one name to another while at the same time moving it from one location to another,
you would be renaming the file or the directory while relocating it in a single command.
versus rename first, then move.
/home/myusernmae/myfile
need to be in
/home/userusername/yourfile
mv /home/myusernmae/myfile /home/yourusername/yourfile
will do this in a single step provided that I have write access into your homedirectory which is commonly no permitted.

It is difficult to understand what you are after in the way you form your question and in the way you copy/paste information in support of what you are asking.

most linux systems have a rename command. but mv achieves the same goal when moved within the same location.
if you want dir1 to be within dir2
mv dir1 dir2/ will relocate dir1 to be within dir2. since dir2 did not exist prior to your issuing the command, mv interpreted what you did as a move. if dir2 existed, you would get dir1 moved into dir2.
0
Hugh FraserConsultantCommented:
Maybe a bit of filesystem basics will help. A linux filesystem is just a list of pointers (called inodes), and a pool of free blocks. An inode contains a pointer to the first set of blocks allocated to a file. As files grow, more blocks are grabbed from the free pool. But other programs are also creating files at the same time grabbing free blocks from the pool. Since the new set of blocks aren't necessarily adjacent to the previous set in the file, each set also contains a pointer to the next set. So a file is just an inode that contains a pointer to the start of a linked list of blocks.

Theoretically, that's all that's needed. You can open a file by it's inode number if you know it, but it's kind of like an unlisted phone number. So another file is created to contain a directory of file names and pointers to their inodes. This is a directory file. It's just another data file; only the contents are different. There's one for each directory and subdirectory in the filesystem. And since a directory is just a file like any other, a subdirectory is just another entry in its parent directory file. Of course, there's a bit more to it than this, but in a discussion of mv vs cp, this is enough to explain how it works.

So moving a file doesn't change its inode... it just changes which directory file contains the pointer to it's inode. In the same way, moving an entire directory (which is just another file) doesn't change its inode, just which parent directory file points to its inode.

Copying a file, on the other hand, means creating an entirely new file and making a copy of all the contents.

Deleting a file involves removing the directory entry, returning the blocks to the free pool, and finally marking the inode as unused.

BTW,  the chaining together of sets of blocks as a file grows is what leads to fragmentation, so there's lots of sophistication i've glossed over in this explanation to ensure a filesystem performs well.
0
gudii9Author Commented:
if you want dir1 to be within dir2
mv dir1 dir2/ will relocate dir1 to be within dir2. since dir2 did not exist prior to your issuing the command, mv interpreted what you did as a move. if dir2 existed, you would get dir1 moved into dir2.
if there is no dir2 before hand what happens?

i tried creating dir1 then gave
mv dir1 dir2/
it created dir2 directory but did not moved dir1 into dir2


sh-4.4$ mkdir dir1                                                                                                                        
sh-4.4$ ls -ltr                                                                                                                          
total 8                                                                                                                                  
-rw-r--r-- 1 30410 30410  978 Dec 19 16:38 README.txt                                                                                    
drwxr-xr-x 2 30410 30410 4096 Dec 19 16:42 dir1                                                                                          
sh-4.4$ mv dir1 dir2/                                                                                                                    
sh-4.4$ ls -ltr                                                                                                                          
total 8                                                                                                                                  
-rw-r--r-- 1 30410 30410  978 Dec 19 16:38 README.txt                                                                                    
drwxr-xr-x 2 30410 30410 4096 Dec 19 16:42 dir2                                                                                          
sh-4.4$ cd dir2                                                                                                                          
sh-4.4$ ls -ltr                                                                                                                          
total 0                                                                                                                                  
sh-4.4$ pwd                                                                                                                              
/home/cg/root/dir2                                                                                                                        

please advise
0
arnoldCommented:
what do you mean, note you created dir1. you then ran mv dir1 dir2/.
note the resulting listing you have dir2, but you do not have dir1.
please note my prior explanation and note the time stamp of the new dir2 as having the same mtime stamp.

dir2 must exists for mv to move dir1 into it.
0
gudii9Author Commented:
let me try

not sure why below link strangely redirecting to some home page instead of unix editor
http://www.tutorialspoint.com/unix_terminal_online.php

please advise
0
arnoldCommented:
see response to your other identical query. issues with a site, should be addressed to the owners of that site or requesting assistance on that site.
0
gudii9Author Commented:
sure, it works again today
0
gudii9Author Commented:
http://www.indiastudychannel.com/resources/144215-What-are-the-differences-between-MV-and-CP-command.aspx

now i can run both

sh-4.4$ pwd                                                                                                                                                                                                                    
/home/cg/root                                                                                                                                                                                                                  
sh-4.4$ ls -ltr                                                                                                                                                                                                                
total 4                                                                                                                                                                                                                        
-rw-r--r-- 1 18799 18799 978 Feb 20 21:36 README.txt                                                                                                                                                                          
sh-4.4$ mv dir1 dir2/                                                                                                                                                                                                          
mv: cannot stat 'dir1': No such file or directory                                                                                                                                                                              
sh-4.4$ touch test                                                                                                                                                                                                            
sh-4.4$ ls -ltr                                                                                                                                                                                                                
total 4                                                                                                                                                                                                                        
-rw-r--r-- 1 18799 18799 978 Feb 20 21:36 README.txt                                                                                                                                                                          
-rw-r--r-- 1 18799 18799   0 Feb 20 21:42 test                                                                                                                                                                                
sh-4.4$ touch test1                                                                                                                                                                                                            
sh-4.4$ mv test test_n                                                                                                                                                                                                        
sh-4.4$ ls -ltr                                                                                                                                                                                                                
total 4                                                                                                                                                                                                                        
-rw-r--r-- 1 18799 18799 978 Feb 20 21:36 README.txt                                                                                                                                                                          
-rw-r--r-- 1 18799 18799   0 Feb 20 21:42 test_n                                                                                                                                                                              
-rw-r--r-- 1 18799 18799   0 Feb 20 21:43 test1                                                                                                                                                                                
sh-4.4$ cp test1 test1_n                                                                                                                                                                                                      
sh-4.4$ ls -ltr                                                                                                                                                                                                                
total 4                                                                                                                                                                                                                        
-rw-r--r-- 1 18799 18799 978 Feb 20 21:36 README.txt                                                                                                                                                                          
-rw-r--r-- 1 18799 18799   0 Feb 20 21:42 test_n                                                                                                                                                                              
-rw-r--r-- 1 18799 18799   0 Feb 20 21:43 test1                                                                                                                                                                                
-rw-r--r-- 1 18799 18799   0 Feb 20 21:45 test1_n                                                                                                                                                                              


mv is like rename as the timestamp remain as original file
cp is changes timestamp as it keeps original file and also creates new file with same content
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Linux

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.