Quiero copiar todos los archivos de un directorio excepto algunos archivos en un subdirectorio, aprendamos como !
Cuando ejecutamos el comando cp
cp <origen> <destino>
Linux crea ( o modifica ) el archivo destino con el mismo contenido que el archivo origen. Este comando no funciona si <origen> es un directorio
cp <origen> <destino> -r
En ese caso debemos usar el flag -r para indicar que copie el directorio <origen> y todo lo que se encuentre en su subdirectorios. https://man7.org/linux/man-pages/man1/cp.1.html
Sin embargo, en este caso en particular debia copiar <origen> que tenia 30 subdirectorios, menos el directorio assets
Podria haber ejecutado el comando cp 29 veces. Y aunque esa tarea no era muy dificil, no me veia ejecutando a mano 34 comandos de cp mientras espero que termine cada uno para poder ejecutar el siguiente.
Para resolver este problema, debemos indicarle al comando cp cada archivo que queremos copiar y excluir a los que no deseamos.
El comando CP puede recibir UN ORIGEN o MULTIPLES ORIGENES entonces nuestro problema se vuelve este: "como obtengo la lista de archivos de un directorio ? "
ls -A
El comando LS nos devolvera la lista completa de los archivos de ORIGEN. https://man7.org/linux/man-pages/man1/ls.1.html Debemos solo retirar la carpeta no deseada
ls -A | grep -v "assets"
En esta concatenacion de comandos, el comando GREP retirara de los resultados aquellos archivos que esten en la carpeta assets/archivos https://man7.org/linux/man-pages/man1/grep.1.html
El siguiente paso es enviarle esa lista de archivos de ORIGEN al comando CP.
cp -r $( ls -A | grep -v "assets" ) /tmp/DESTINO
Cuando encerramos un comando en $( ) estamos ejecutando primero el contenido del parentesis y luego ese resultado se integra en el comando exterior.
Add new comment