GNU/Linux >> Tutoriales Linux >  >> Linux

carpeta de contenido de copia de diferencia entre /. y /* en linux

Hay una diferencia fundamental entre estas dos formas de argumento. Y es importante entender lo que está sucediendo.

Con ../foldersource/. el argumento se pasa sin cambios al comando, ya sea cp o rm o algo mas. Depende del comando si ese punto final tiene una semántica especial o única diferente de la convención estándar de Unix de simplemente señalar el directorio en el que reside; ambos rm y cp parece tratarlo como un caso especial.

Con ../foldersource/* el argumento se expande primero con el shell before el comando se ejecuta y pasa cualquier argumento. Así, rm nunca ve ../foldersource/*; ve la versión expandida ../foldersource/file1.ext ../foldersource/file2.ext ../foldersource/childfolder1 y así. Esto es importante porque los sistemas operativos limitan la cantidad de argumentos que se pueden pasar a un comando, generalmente solo unos pocos cientos.


Cuando copias usando cp -a source/* target/ está copiando la mayoría de los archivos y directorios de source a target . Específicamente, los elementos que se excluyen 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 copias usando cp -a source/. target/ estás copiando todo el contenido de source , incluidos los elementos que comienzan con un punto (. ) a target

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ás usando bash , zsh , puedes usar el dotglob opción para cambiar el significado de * para que incluya archivos y directorios que comiencen con un punto (yash también tiene un dotglob opción; sin embargo, luego incluye . y .. en expansiones globales que limitan su usabilidad. Ver también FIGNORE='@(.|..)' en ksh93 ).

Curiosamente, cp -a source/. target/ está garantizado nunca para crear el componente target/source . (Por otro lado, cp -a source target/ hará una de dos cosas dependiendo de si target ya existe. Consulte Cómo copiar una carpeta recursivamente de forma idempotente usando cp para obtener más detalles).

Cuando eliminas usando rm -rf source/* está eliminando los archivos y directorios dentro de source que no comienzan con un punto (. ). Sujeto al dotglob ajuste que ya he mencionado. No eliminará el directorio source mismo.

Cuando intenta eliminar usando rm -rf source/. fallará, como ya han explicado otros, porque POSIX prohíbe la eliminación de una ruta cuyo último componente sea . o .. . El equivalente más cercano es rm -rf source , que eliminará el source directorio y todo su contenido sin importar si comienzan o no con un punto (. ).


No puedes hacer rm -rf ../foldersource/. porque rm no permite esto, como se indica explícitamente en el manual:

Cualquier intento de eliminar un archivo cuyo último componente de nombre de archivo es '.' o '..' se rechaza sin ninguna indicación, según lo dispuesto por POSIX.

y en el manual POSIX man 1p rm vemos:

Si cualquiera de los archivos punto o punto-punto se especifica como la parte del nombre base de un operando (es decir, el componente final del nombre de la ruta) o si un operando se resuelve en el directorio raíz, rm debe escribir un mensaje de diagnóstico para el error estándar y no hacer nada más con dichos operandos. .


Linux
  1. ¿Cuál es la diferencia entre un contenedor de Linux y una imagen?

  2. Diferencia entre los comandos "su" y "su -" en Linux

  3. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  4. diferencia de linux entre sudo crontab -e y simplemente crontab -e

  5. ¿Cuál es la diferencia entre 'localizar' y 'buscar' en Linux?

Copie archivos entre Linux y FreeDOS

Comprender la diferencia entre los comandos sudo y su en Linux

¿Cuál es la diferencia entre los núcleos de macOS y Linux?

¿Cuál es la diferencia entre Suspender e Hibernar en Linux?

¿Cuál es la diferencia entre Linux y Unix?

diferencia entre netstat y ss en linux?