Estoy tratando de encontrar diff
correos electrónicos entre todos los archivos con los mismos nombres en dos copias de un directorio (por ejemplo, un trabajo y una copia de seguridad). Por ejemplo, puedo diff
dos archivos del mismo nombre en ambos:
> diff d1/f.cpp d2/f.cpp
o puedo encontrar diferencias entre los directorios:
> diff d1 d2
pero, ¿cómo puedo encontrar diferencias solo entre los *.cpp
archivos?
> diff d1/*.cpp d2/*.cpp
no parece funcionar (por razones obvias).
[Probablemente sea fácil de resolver con bucles, pero estoy tratando de encontrar una forma más elegante]
echo "${file##*/}";
antes deldiff
comando, por lo que uno sabe qué archivos se están comparando realmente. Además, como se menciona en la respuesta de @ Rinzwind, este método no cubre el caso donde la lista de archivos no es exactamente la misma en ambos directorios.diff -qr {DIR1} {DIR2}
hace todos los archivos en ambos directorios.q
muestra solo diferenciasr
Hace recursivo. Déjalo afuera si no necesitas esoNo puede indicarle
diff
directamente que use comodines, pero puede agregar:para excluir archivos. Entonces, si solo desea que
*.cpp
el método más fácil sea crear un archivo de texto que enumere todos los archivos que no lo son*.cpp
. Puede hacer esto con el siguiente comando:ls -I "*.cpp" > excluded_files
donde el-I "*.cpp"
argumento ignora todos los archivos .cpp. Tenga en cuenta que las comillas son necesarias.fuente
Algún tiempo después de hacer la pregunta, descubrí la
meld
utilidad diff, y la estoy usando desde entonces. Este es un gran programa basado en GUI que hace que la comparación y fusión entre archivos y directorios sea una tarea muy fácil. Hace comparaciones de dos o tres vías.Específicamente, responde a mi pregunta original porque muestra una comparación codificada por colores de los contenidos del directorio y le permite comparar archivos específicos haciendo doble clic en el nombre del archivo.
Si uno necesita más que una comparación de tres vías, entonces
gvimdiff
(según elvim
editor) también es una excelente opción que proporciona esta funcionalidad.fuente
Hay una solución ligera para eso:
diff dir1 dir2 | vim -R -
en la cáscaraAgregará pliegues y una comparación lado a lado para los archivos modificados.
fuente