Bash – Unix Copy (cp) without Symbolic Links

bashshellsymbolic-linkunix

I want to copy my files but convert the symbolic links to hard links (ie. the actual file). How can I do this?

Here's my code (that isn't working):

cp -RL ${FROM_DIR} ${TO_DIR}

Note: this is for Xcode purposes – symlinks are not allowed in a build.

Thanks!

EDIT:

The issue is the way I remove the files first – it isn't removing existing symlinks.

rm -RLf "${FROM_DIR}/*"

Best Answer

Not sure about UNIX cp implemebntation, but GNU cp by default is not preserving symlinks. And hard links are not the same thing as files. By default cp creates files/dirs from symlinks. Probably you don't need -L option for your purposes. If you really need this that you can use --no-preserve=links option.

Refer to man cp:

   --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all

   --no-preserve=ATTR_LIST
          don't preserve the specified attributes
Related Question