¿Cuál es el significado del punto en los comandos bash y cómo es diferente de un asterisco?

11

Estoy tratando de entender la importancia del punto en bash y cómo se diferencia de un asterisco. ¿Alguien puede dar más detalles? Por ejemplo, ¿cuál es la diferencia entre cp -ar /foo/. /foo2/ycp -pr /foo/* /foo2/

Mike B
fuente

Respuestas:

12

El punto ( .) es solo el .directorio dentro de un directorio que es el mismo que el directorio en sí ( ls -la /foose lo mostrará). Entonces, si copia en foo/.otro lugar, efectivamente copia todo el árbol a continuación foosin copiarse a foosí mismo (lo está copiando en lo foo2/.que es lo mismo foo2).

/foo/*se expande por la cáscara a la lista de archivos que no son ocultos y directorios en /foo, por lo que sería copiar la misma estructura de directorios bajo /fooen /foo2así, a excepción de los dotfiles / dotdirs. Efectivamente, cprecibirá (potencialmente) muchos argumentos. Si la lista es demasiado grande, incluso puede provocar cpque falle la ejecución de .

Stéphane Chazelas
fuente
Lo siento pero me estoy confundiendo. Entonces, por naturaleza, ¿el asterisco hace que el comando sea recursivo? En otras palabras, ¿ cp -r /foo/*hace lo mismo que cp /foo/* ?
Mike B
55
@MikeB, no, el shell solo expande la lista de archivos en el directorio / foo. No altera el comportamiento de cp. Use set -xo echo cp -pr /foo/* /foo2para ver qué está pasando. Es importante darse cuenta de que es el caparazón que expande los comodines. cpNo ve la estrella.
Stéphane Chazelas
¿Qué hay de esto? chmod 755 -R. versus chmod 755 -R *
camino del futuro