Update 25/02/2011: las respuestas que habéis enviado son correctas. Explicaré entre líneas lo que hacen los distintos comandos (pulsa sobre More>>).
¿Estás seguro? Sí, es una operación básica, pero sin que os ponga la solución en este post (lo dejo para el siguiente), ¿sabrías decirme con absoluta certeza qué hacen cada uno de estos comandos cp? ¿ y el mkdir o touch del ejercicio 0? No te mientas 😉
0.
mkdir -p /tmp/tests/{d1,d2} cd /tmp/tests touch d1/{.oculto,a,b} |
[hide-this-part]
Crea dos directorios, d1 y d2 dentro de tests. Si tests no existiera, la opción -p fuerza su creación.
Con touch, creamos 3 archivos (.oculto, a y b) dentro de d1
[/hide-this-part]
1.
cp d1/* d2/ |
Pista: ¿se han copiado TODOS los archivos o sólo 2 de ellos?
[hide-this-part]
Sólo 2 de los archivos han sido copiados. El * en cp NO funciona exactamente como una expresión regular (si así fuera, un * abarcaría cualquier cosa, incluyendo nombres de archivos que empiecen por punto). Pero no, el * casa con cualquier nombre de archivo que no sea uno oculto. También casaría con un archivo de nombre c.d por ejemplo
[/hide-this-part]
Reseteamos (Borramos el contenido de /tmp/tests y desde ese mismo directorio ejecutamos 0 de nuevo…)
2.
cp d1/ d2/ |
Pista: ¿se ha copiado algo?
[hide-this-part]
No se copia nada. Hay que especificar qué es lo que se quiere copiar de d1 en d2. No se debe a que ya exista d2… puedes probar con cp d1/ d3/ y ocurrirá lo mismo. Ídem si lo pruebas sin la / del final.
[/hide-this-part]
Reseteamos
3.
cp d1/*.* d2 |
Pista: ¿se ha copiado algo?
[hide-this-part]
No se copia nada. El * no puede ser sustituído por el conjunto vacío en las órdenes copy. Si así fuera (si se pudiera sustituir por el conjunto vacío, el archivo .oculto sí que se hubiera copiado). Ojo! Si en d1 tuviéramos un archivo de nombre c.d, entonces los comodines sí que casarían con dicho archivo y sería copiado.
[/hide-this-part]
Reseteamos
4.
cp d1/. d2 |
Pista: ¿se ha copiado algo?
[hide-this-part]
No copia nada pues la orden es equivalente a la dada en el ejercicio 2.
[/hide-this-part]
Reseteamos
5.
cp -R d1/. d2 |
Pista: vaya… si no hay subdirectorios, para qué habré usado el flag -R };-)
[hide-this-part]
¡Por fin! Esta orden sí que copia TODO el contenido de d1 en d2 (archivos ocultos incluídos). Si hubiera subcarpetas, también las copiaría. ¡Ojo_1! -R -r –recursive son equivalentes. ¡Ojo_2! No hay subdirectorios, pero aún así hemos usado -R para copiar de forma recursiva. ¡Ojo_3! No es lo mismo el ejercicio 5 que el ejercicio siguiente: cp -R d1/ d2/ (esto último copiaría dentro de d2 el directorio d1 – incluído el propio nombre d1 – )
[/hide-this-part]
OJO SOLUCIONES AQUÍ ABAJO (un intento vaya)
A ver si acierto:
(no tengo mi linux a mano que estoy en el curro 😉
0. Se crean los directorios d1 y d2 y los ficheros .oculto, a y b dentro de d1/
1. Se copian a y b a d2 (he de decir que no me di cuenta del punto y pensé que se copiaban los tres)
2.no se copia nada (con -r supongo que si)
3.¿se copiaría el fichero oculto? (ahora no recuerdo si «*» se puede sustituir por «nada»)
4.no se copia nada (con -r supongo que si)
5. contestado en 4. estas copiando el directorio d1 dentro de d2 (d1/ = d1/.)
1.- Pues si, solo a y b, .oculto no.
2.- Pues no, ya que el directorio d1 para copiarlo necesitamos poner -r
3.- .oculto no se copia ya que el * de delante no puede ser vacío, a y b no tienen punto.
4.- No se copia nada, faltaría -r para que se copie el contenido del directorio d1 dentro de d2
5.- Copiamos todos los ficheros dentro de d2, incluido .oculto.
Me gustó mucho el post, bastante entretenido. Respecto a las respuestas, Luiso lo clavó.
Para copiar todo se podría poner también: cp d1/. d2
el punto significa todo el contenido de la carpeta d1
Todo bien salvo el punto 3.
El * si se puede sustituir por vacío, el problema en el ejemplo es el utilizar un archivo oculto, el cual es un tipo de archivo especial. Si utilizas en ese mismo ejemplo el archivo ejemplo. (acabado en punto)verás que si lo copia.
Incluso más general pon:
touch d1/a-{b,,cd}-{t,d}
cp d1/a-*-* d2