Si yo les pidiera que mencionen un comando para copiar una carpeta hacia otro lugar, casi todos mencionarían a cp.
Ahora, si les digo que además, deben copiar todo el contenido de esa carpeta excepto 1 archivo, ahí muchos se quedarían pensando, y otros mencionarían a rsync, pues con el parámetro –exclude se puede excluir X archivo o carpeta y no copiarla. Pero… ¿sabían que cp también permite hacer esto? … O_O … sí amigos, cp tiene su propio «exclude» jeje.
Por ejemplo, tenemos la carpeta isos que contiene: ubuntu.iso, debian.iso y archlinux.iso :
Y sucede que deseamos copiar hacia la otra carpeta (distros-deb, que está vacía) el archivo debian.iso y ubuntu.iso, o sea, todos menos archlinux.iso
Para ello podríamos copiar un archivo y luego otro, manualmente, pero es mucho más inteligente usar las opciones que nos brinda el sistema no? … 😀 … por ejemplo, para hacer esto basta con:
cp isos/!(archlinux.iso) distros-deb/
Y esto basta para que se copie TODO lo que contenga el directorio isos hacia distros-deb, todo excepto archlinux.iso 😉
Pero supongamos que no solo tenemos esos 3 archivos, sino que además tenemos fedora.iso y chakra.iso … y queremos hacer lo mismo, quedaría excluir también de la copia fedora.iso y chakra.iso, veamos cómo hacerlo:
cp isos/!(archlinux.iso|fedora.iso|chakra.iso) distros-deb/
Como pueden ver, se puede excluir varios archivos o carpetas, solo los separamos por una tubería (|) y asunto resuelto 😀
Con esto no quiero decir que cp sea mejor para todo que rsync … pero, ambos son excelentes herramientas, por ejemplo … ¿conocían el parámetro -u de cp? … jeje, seguro que no 😉
Bueno, nada más que agregar … ¿a que este es un interesante tip? 😀
Saludos
No conocía este método, siempre se aprende algo nuevo.
Excelente tip, gracias.
Gracias 🙂
Muy bueno el tip, no lo conocía! Solo resta explicarles a los usuario de Arch y Fedora porque excluiste sus iso´s jeje
JAJAJAJAJAJA no puse los ISOs de Arch y Fedora porque el ejemplo trataba de copiar solo distros Deb… JAJAJAJAJA.
Aquí hay que hacer un par de puntualizaciones. Una es que esto sólo funciona si está activada la opción extglob del bash. Si no lo está se activa con este comando:
shopt -s extglob
Se puede poner en el .bashrc para tenerla activada siempre.
La otra puntualización es que este truco no es una opción del comando cp, sino que funciona a nivel del bash. Lo que significa que se puede usar con cualquier comando. No sólo con cp. Podéis hacer la prueba escribiendo:
echo Ficheros: isos/!(archlinux.iso|fedora.iso|chakra.iso)
Por lo demás es un truco muy útil. Junto con la opción -u de cp, que también me resulta útil de vez en cuando.
Claro, es una expresión regular
En realidad es un patrón extendido. Una expresión regular es otra cosa, pero se parece. 🙂
Sí, la -u de cp es verdaderamente interesante. Reconozco que soy un gran fan de rsync … pero no sé, le tengo apego al pobre cp hahaha.
Sobre lo de activar shopt, no lo sabía, asumí que esto funcionaba automáticamente, gracias por el dato.
Y sí, estaba sospechando que tenía más que ver con Bash que con cp, pero aún no había probado hacer un rm o un cat o algo así 🙂
Gracias por el comentario, de veras que sí 😀
Es un placer aportar mi granito de arena. 🙂
De hecho, siempre he estado interesado en aprender de expresiones regulares… ¿te embullas y haces un post para novatos sobre eso? 😀
¡Jajajaja!! Ya me habéis liado. 🙂 Con lo feliz que estaba yo sin comentar… 🙂
Pues la verdad es que me está llamando. 🙂 Pero todavía tengo que pensarlo un poco. Parece dificil de explicar.
jajajajaja nada no te preocupes, tú sigue comentando que así igual se aprende ajajajaja, lo importante es compartir 😀
Muy buen tip.Nunca te acostarás sin aprender algo nuevo.
Exacto, y lo mejor de todo es que yo aprendo muchísimo con los comentarios que ustedes dejan en los posts, me encanta aprender cosas raras cada día JAJAJA.
Buen truco. No lo conocía 🙂
Un placer 😉
Pero cuando pones isos te refieres a poner debian.iso ubuntu.iso/!( etc etc) ? no
Efectivamente resultó ser un tip muy interesante. No solo por el artículo en sí, sino también por el valor agregado de los comentarios.
Hermosa comunidad la de <º Linux
no me ha servido de nada tu ayuda, deberías poner algún ejemplo, para que los estudiantes podamos entender mejor tu magnífica técnica.
Gracias por dedicarme un tiempo, siempre recordaré esta página en mi corazón
dices que omites directorios, sin embargo en los ejemplos solo omites archivos, ¿sabes como omitir un directorio en particular? saludos.