Linux Copy Command – Copy Recursively Except Hidden Directory

command linecplinux

How do I copy recursively like cp -rf *, but excluding hidden directories (directories starting with .) and their contents?

Best Answer

You could just copy everything with

cp -rf 

and then delete hidden directories at the destination with

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

Alternatively, if you have some advanced tar (e.g. GNU tar), you could try to use tar to exclude some patterns. But I am afraid that is not possible to only exclude hidden directories, but include hidden files.

For example something like this:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Btw, GNU tar has a zoo of exclude style options. My favourite is

--exclude-vcs
Related Question