Cuando copia usando cp -a source/* target/está copiando la mayoría de los archivos y directorios de sourcea target. Específicamente, los elementos que están excluidos probablemente serán archivos que comienzan con un punto ( .) en el nivel superior de source.
Considere estos archivos (o directorios) en source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
Cuando copia usando cp -a source/. target/está copiando todo el contenido de source, incluidos los elementos que comienzan con un punto ( .) entarget
Considere estos archivos (o directorios) en source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Si está usando bash, zshpuede usar la dotglobopción para cambiar el significado de *modo que incluya archivos y directorios que comiencen con un punto ( yashtambién tiene una dotglobopción; sin embargo, luego incluye .y ..en expansiones globales que limitan su usabilidad. Ver también FIGNORE='@(.|..)'en ksh93).
Curiosamente, cp -a source/. target/se garantiza que nunca creará el componente target/source. (Por otro lado, cp -a source target/hará una de dos cosas dependiendo de si targetya existe o no . Consulte Cómo copiar una carpeta de forma recursiva de forma idempotente usando cp para obtener más detalles).
Cuando elimina usando rm -rf source/*está eliminando los archivos y directorios sourceque no comienzan con un punto ( .). Sujeto a la dotglobconfiguración que ya he mencionado. No eliminará el directorio en sourcesí.
Cuando intente eliminarlo rm -rf source/., fallará, como ya lo han explicado otros , porque POSIX prohíbe la eliminación de una ruta cuyo último componente es .o ... El equivalente más cercano es rm -rf source, que eliminará el sourcedirectorio y todo su contenido, independientemente de si comienzan o no con un punto ( .).
It's up to the command whether that trailing dot makes any senseUm, el punto siempre enlaza con el directorio que lo contiene, por lo../foldersource/.que no debería ser diferente de indicar./foldersource/y, de hecho, es solo una forma redundante de decir lo mismo. Ningún comando intenta "dar sentido" a punto o doble punto, ya que estos son estándar en los sistemas de archivos Linux / Unix.rmsimplemente rechaza eliminar el directorio de trabajo actual como sejimmijindica en su respuesta. Además, tenga en cuenta que está utilizando./en todos sus ejemplos mientras OP tiene../allí. Algo de una (gran) diferencia.