Linux is not Unix, I keep finding out differences years after years.
I’ve been using cp -r for over 25 years to find out today, the good old cp -r is cp -Lr on Linux.
e.g. AIX
$ touch foo $ ln -s foo bar $ cp -r bar boz $ ls -la boz -rw-r--r-- boz
cp convert symlink bar to file boz.
Now I found out in Linux, cp acts like a tar
$ touch foo $ ln -s foo bar $ cp -r bar boz $ ls -la boz lrwxrwxrwx boz -> foo
This special effect of -r is not documented in the manpage. The old man used to RTFM. More than once.
CP(1) User Commands CP(1) NAME cp - copy files and directories DESCRIPTION -R, -r, --recursive copy directories recursively
Time passes, users no longer read MAN, they read INFO
11.1 ‘cp’: Copy files and directories ===================================== When copying from a symbolic link, ‘cp’ normally follows the link only when not copying recursively or when ‘--link’ (‘-l’) is used. This default can be overridden with the ‘--archive’ (‘-a’), ‘-d’, ‘--dereference’ (‘-L’), ‘--no-dereference’ (‘-P’), and ‘-H’ options. If more than one of these options is specified, the last one silently overrides the others.
Ok, so, for recursion, let’s dereference.
$ rm baz $ cp -rL boz baz $ ls -la baz -rw-r----- baz
Thinks change. 18 years of blogging. I learnt something new today