Copiar archivos en Linux desde una lista

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:

Generar un ambiente de prueba para copiar archivos en Linux desde una lista
Figura 1 – Generar un ambiente de prueba para copiar archivos en Linux desde una lista

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.

Copiar archivos en Linux desde una lista con la ayuda de un script
Figura 2 -Copiar archivos en Linux desde una lista con la ayuda de un script

Espero que este post les haya resultado útil. ¡Nos leemos en breve!

2 comentarios en «Copiar archivos en Linux desde una lista»

  1. 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.