Siempre que solo esté buscando archivos y carpetas ocultos en el nivel A y no quiera, por ejemplo
A/b/.hidden
para ser copiado, deberías poder usar esto:
cp -r A/.[^.]* B
Básicamente significa copiar cualquier cosa que comience con un . y luego cualquier carácter que no sea un . Eso filtra . y ..
Editar:se eliminó la -p del comando cp ya que el autor de la pregunta no ha indicado que quiere conservar las propiedades, las fechas, etc.
El problema con A/.* es que existe el directorio . en A que también coincide con el patrón.
Puede activar patrones globales extendidos y usar lo siguiente:
shopt -s extglob
cp -r A/.!(?(.)) B
Coincide con archivos cuyo nombre comienza con un punto y cuyo segundo carácter no es ni un punto ni nada ( ?(.) coincide con nada o un punto, !(...) lo niega, es decir, !(?(.)) coincide con todo lo demás que nada o un punto).
Para casos como este recomendaría usar find en lugar de cp así:
find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;
La sintaxis básica se descompone así:
find A/ -type f:findelementos en el directorioA/cuyo tipo es un archivo (en lugar de un directorio)…-maxdepth 1 -name '.*':A esto por unmaxdepthde 1 directorios y cuyonamecomienza con..-exec cp -p {} B/ \;:Y una vez que se encuentran estos archivos,execelcpcomando con un-pmarca para conservar las fechas/horas de la fuente ({}) al destino deB/.
Me gusta usar maxdepth para agregar una capa de control para no copiar accidentalmente un sistema de archivos completo. Pero siéntete libre de eliminar eso.