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
:find
elementos en el directorioA/
cuyo tipo es un archivo (en lugar de un directorio)…-maxdepth 1 -name '.*'
:A esto por unmaxdepth
de 1 directorios y cuyoname
comienza con.
.-exec cp -p {} B/ \;
:Y una vez que se encuentran estos archivos,exec
elcp
comando con un-p
marca 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.