BASH: Como ejecutar el comando cp y excluir ciertos subdirectorios

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