Dos de los comandos más utilizados en la línea de comandos de Linux son cp y mv. El primero de ellos se utiliza para copiar archivos. Por otra parte, el segundo se emplea para moverlos de un lugar a otro o renombrarlos. Estas operaciones son muy simples de realizar si estamos tratando con un solo archivo. Sin embargo, si se trata de 10 o más, la tarea puede volverse tediosa y propensa a fallar por errores humanos. Al utilizar técnicas simples de shell scripting nos evitaremos esta tarea rutinaria. Por eso, en este post mostraremos una alternativa para copiar archivos en Linux desde una lista. Por ejemplo, esto nos puede resultar muy útil para copiar archivos de respaldo de un directorio a otro.
Copiar archivos en Linux
Es importante destacar que lo que explicaremos a continuación en cuanto a la copia de archivos también es válido para mover o renombrar los mismos.
Para empezar, crearemos tres directorios vacíos llamados dir1, dir2, y dir3. Luego utilizaremos el comando touch para generar 50 archivos vacíos dentro de dir1 con los nombres archivo1, archivo2, y así sucesivamente:
mkdir dir1 mkdir dir2 mkdir dir3 touch dir1/archivo{1..50} ls dir1 ls dir2 ls dir3
En la Fig. 1 vemos el progreso de nuestro ejercicio:
Scripts al auxilio
Si solamente tuviéramos que copiar todos los archivos de dir1 a alguno de los otros, la tarea sería fácil. Pero si tenemos que seleccionar algunos y alternar el destino, haremos lo siguiente:
Paso 1 – Crear un archivo llamado lista.txt en el en cada lína indicaremos el objeto de dir1 que deseamos copiar separado por una coma del destino. Por ejemplo:
archivo1,dir2 archivo3,dir2 archivo4,dir3 archivo15,dir2 archivo24,dir3 archivo32,dir2 archivo38,dir2 archivo39,dir2 archivo41,dir3 archivo43,dir3 archivo47,dir2 archivo49,dir2 archivo50,dir3
Paso 2 – Crear el script copia.sh con los siguientes contenidos:
#!/bin/bash LISTA=./lista.txt while IFS=',' read ARCHIVO DESTINO do cp dir1/$ARCHIVO $DESTINO done < $LISTA
donde IFS (Input File Separator) se utiliza para indicar cuál será el separador de campos en cada línea. Luego de la palabra clave read especificamos el nombre de las variables (ARCHIVO y DESTINO) a las que deseamos asignar los valores que encontremos en cada línea.
A continuación, asignémosle permisos de ejecución:
chmod +x copia.sh
Paso 3 – Ejecutar el script y verificar si la copia se realizó correctamente:
./copia.sh ls dir2 dir3
Como podemos ver en la Fig. 2, la operación resultó exitosa.
Espero que este post les haya resultado útil. ¡Nos leemos en breve!
2 comentarios en «Copiar archivos en Linux desde una lista»
Hola una consulta no entiendo bien que se debe poner en ARCHIVO Y DESTINO
ARCHIVO y DESTINO son los nombres de las variables que representan cada archivo de la lista (leída línea por línea) y el correspondiente destino donde deseamos copiarlos.
Los comentarios están cerrados.