Como copiar todo el contenido de un directorio en otro, ficheros ocultos incluidos

Quiero copiar todo el contenido de un directorio en otro, archivos que empiezan por "." incluidos. Pero con

cp a/* b/

no se consigue. En cierto modo tiene sentido, porque si intentara copiar lo que se ve con un ls -la intentaría copiar "." y "..", sería un poco raro. Pero si eso no es así hay excepciones a la sintaxis de * para cualquier cosa o ? para cualquier carácter único que no he encontrado por ningún sitio.

Hay otros que no funcionan y no acabo de entender por qué:

cp a/?* b/
cp a/[.a-zA-Z0-9]* b/

Igual he probado alguno más que no me acuerdo, pero se ve la idea. Por supuesto pasa lo mismo con rm.

Mi duda no es tanto como conseguirlo, que ya se que hay otras maneras, como entender la sintaxis de este tipo de comandos.

Gracias de antemano.

yo habria hecho un comando en el bash_history que hiciera un "cp *.* && cp *.*~", es media prmitiva mi respuesta pero asi lo habria hecho

cp -a /directorio/origen/ /directorio/destino/

Tu consulta es puntual o te interesa saber el porque * no incluye a . ?

cp -r directorio_origen directorio_destino

Saludos wink

Por lo que he visto al ejecutar

man cp

cp -r puede dar problemas con algun tipo de fichero, recomienda mejor cp -R

Pato Silva escribió:
cp -a /directorio/origen/ /directorio/destino/

Tu consulta es puntual o te interesa saber el porque * no incluye a . ?

Creo que eso no hace lo que yo quiero, lo he probado y a mí me copia al directorio de destino, el directorio de origen. Lo que quiero es

cp -r /directorio/origen/* /directorio/destino/

y también los archivos que empiecen por . o sea algo así como lo anterior más

cp -r /directorio/origen/.* /directorio/destino/

Pero eso me intenta copiar "." y "..".

Una cosa la opción -a ¿la usas porque incluye -r?

Si en realidad lo que me interesa es saber por qué * no incluye a ".".

quilloquepasa escribió:
cp -r directorio_origen directorio_destino

Saludos wink

Me pasa lo mismo

funketefred1 escribió:

yo habria hecho un comando en el bash_history que hiciera un "cp *.* && cp *.*~", es media prmitiva mi respuesta pero asi lo habria hecho

No acabo de entender la sintaxis que utilizas.

man cp escribió:

-R, -r, --recursive
copy directories recursively

¿Donde leiste eso?

Pero es que no necesitas tipificar el asterisco para que te copie el directorio en cuestión de forma recursiva, inclusive los archivos ocultos.

Donde dices:

cp -r /directorio/origen/* /directorio/destino/

Debería decir:

cp -r /directorio/origen /directorio/destino/

Saludos wink

berndsch escribió:
Pato Silva escribió:
cp -a /directorio/origen/ /directorio/destino/

Tu consulta es puntual o te interesa saber el porque * no incluye a . ?

Creo que eso no hace lo que yo quiero, lo he probado y a mí me copia al directorio de destino, el directorio de origen. Lo que quiero es

cp -r /directorio/origen/* /directorio/destino/

y también los archivos que empiecen por . o sea algo así como lo anterior más

cp -r /directorio/origen/.* /directorio/destino/

Pero eso me intenta copiar "." y "..".

Una cosa la opción -a ¿la usas porque incluye -r?

Si en realidad lo que me interesa es saber por qué * no incluye a ".".

quilloquepasa escribió:
cp -r directorio_origen directorio_destino

Saludos wink

Me pasa lo mismo

Tu dijiste que querías copiar todo el directorio no solo los archivos ocultos
en ese caso puedes hacer

cp /origen/.[^.]* /destino/

Eso copiará a destino todos los archivos ocultos (y solo los archivos ocultos, no recorre directorios recursivamente a menos que lo indiques)

Utilizo -a porque ademas de recorrer recursivamente conserva los dueños y permisos (entre otras cosas).

No se si es a mi a quien preguntas Pato pero te copio mi salida de man cp

-r     Copia  directorios recursivamente, copiando cualquier fichero no
              directorio ni  enlace  simbólico  (esto  es,  FIFOs  y  ficheros
              especiales)  como  si  fuera  un fichero regular. Esto significa
              intentar leer los datos de cada fichero fuente y escribirlos  en
              el  destino.  Así, con esta opción, `cp' puede muy bien colgarse
              indefinidamente leyendo un FIFO o /dev/tty.  (Esto es un  fallo.
              Significa que uno tiene que evitar -r y debe emplear en su lugar
              -R si no sabe qué hay en el árbol de  directorios  que  se  está
              copiando.  Abrir  un fichero de dispositivo desconocido, digamos
              un escáner, tiene efectos desconocidos sobre el hardware.)

       -R, --recursive
              Copia directorios recursivamente, preservando los no-directorios
              (vea -r justo arriba).