How to convert symlink to regular file?

nibot picture nibot · Dec 4, 2011 · Viewed 42.9k times · Source

What is the most direct way to convert a symlink into a regular file (i.e. a copy of the symlink target)?

Suppose filename is a symlink to target. The obvious procedure to turn it into a copy is:

cp filename filename-backup
rm filename
mv filename-backup filename

Is there a more direct way (i.e. a single command)?

Answer

nibot picture nibot · Nov 15, 2012

There is no single command to convert a symlink to a regular file. The most direct way is to use readlink to find the file a symlink points to, and then copy that file over the symlink:

cp --remove-destination `readlink bar.pdf` bar.pdf

Of course, if bar.pdf is, in fact, a regular file to begin with, then this will clobber the file. Some sanity checking would therefore be advisable.