Noviembre 27th, 2006 | |
Posted in linux
En más de una ocasión te habrás encontrado con la necesidad de tener que comparar el contenido de dos directorios, por ejemplo para ver qué fichero falta en uno de los directorios. Yo suelo usar el siguiente script:
ls $1 > $1.listado
ls $2 > $2.listado
comm $1.listado $2.listado $3
rm $1.listado
rm $2.listado
(Yo lo tengo guardado en un fichero llamado compara en un directorio incluido en el PATH; para poder ejecutarlo desde cualquier sitio).
El trabajo principal lo hace el comando comm, que compara dos ficheros y muestra las diferencias entre ellos. En este caso compara dos ficheros que contiene cada uno el listado de un directorio.
Por ejemplo tengo el directorio dir1 que contiene:
fichero_1.txt
fichero_comun.txt
y el directorio dir2 que contiene:
fichero_2.txt
fichero_comun.txt
Para comparar los directorios uso lo siguiente:
./compara dir1 dir2
y muestra el siguiente resultado:
fichero_1.txt
fichero_2.txt
fichero_comun.txt
En la primera fila tenemos los ficheros que están únicamente en el primer directorio, en el segundo tenemos los que están en el segundo directorio. Por último nos muestra los ficheros que se encuentran en ambos directorios.
El comando comm permite además las siguientes opciones:
-1 no muestra la columna correspondiente al fichero 1.
-2 no muestra la columna correspondiente al fichero 2.
-3 no muestra la columna común.
AsÃ, si no queremos que aparezcan los ficheros presentes en ambos directorios usaremos:
./compara dir1 dir2 -3
Por comodidad yo uso el script anterior siempre con la opción 3 activada:
ls $1 > $1.listado
ls $2 > $2.listado
comm $1.listado $2.listado $33
rm $1.listado
rm $2.listado