Info on cp –preserve=links

I’m trying to understand what cp --preserve=links does when used by itself.

From my tests it seems that it copies a normal file normally and dereferences symlinks, but it seems like it just has the same effect as cp -L when used on a single file.

Is that true or is there something I’m missing?

Asked By: Matt


I’m getting some conflicting information after testing and reading the man page. I just ran some tests and found the following.

[root@el7-1 dest]# ls -l
total 0
lrwxrwxrwx. 1 root root 16 Aug 18 16:51 test1.txt -> ../src/test1.txt

The following commands all deference the link

cp test1.txt test2.txt 
cp -L test1.txt test2.txt 
cp --preserve=link test1.txt test2.txt 

The following command copies the symlink itself

cp -P test1.txt test2.txt 
Answered By: Michael Anckaert

The --preserve=links option does not refer to symbolic links, but to hard links. It asks cp to preserve any existing hard link between two or more files that are being copied.

$ date > file1
$ ln file1 file2
$ ls -1i file1 file2
6034008 file1
6034008 file2

You can see that the two original files are hard-linked and their inode number is 6034008.

$ mkdir dir1
$ cp file1 file2 dir1
$ ls -1i dir1
total 8
6035093 file1
6038175 file2

You can see now that without --preserve=links their copies have two different inode numbers: there is no longer a hard link between the two.

$ mkdir dir2
$ cp --preserve=links file1 file2 dir2
$ ls -1i dir2
total 8
6089617 file1
6089617 file2

You can see now that with --preserve=links, the two copies are still hard-linked, but their inode number is 6089617, which is not the same as the inode number of the original files (contrary to what cp --link would have done).

Answered By: xhienne
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.