¿Hay alguna manera de que pueda realizar una diferencia recursiva de dos directorios pero solo comparar (en sus respectivos lugares) archivos que coincidan con un nombre de archivo o predicado de tipo de archivo específico?
Por ejemplo, me gustaría hacer algo como
diff -r dir-a dir-b -filenames *.java, ivy.xml, build.xml
... o mejor:
diff -r dir-a dir-b -filetype text
Claramente, no es obligatorio usarlo, diffya que supongo que es un encantamiento findy -exec difftambién podría hacer el truco (simplemente no sé cómo generar las rutas de archivo complementarias en el último caso).
command-line
find
diff
Marcus Junius Brutus
fuente
fuente

Respuestas:
Shellscript
differ-rEste shellscript puede realizar una diferencia recursiva de dos directorios, pero solo compara (en sus respectivos lugares) archivos que coinciden con un patrón de nombre de archivo o tipo de archivo específico.
Manifestación
Archivos:
Uso:
Corriendo
differ-r:Las
difflíneas de comando realizadas se imprimen con texto verde y la salida, cuando no hay coincidencia, se imprime con texto predeterminado (blanco sobre negro en la siguiente captura de pantalla).rsynccon filtroSi no necesita obtener ningún resultado que describa la diferencia, solo sepa qué archivos son diferentes o que faltan (por lo que
rsyncle gustaría copiarlos), puede usar la siguiente línea de comando.Manifestación
Si desea una salida limpia sin líneas de comentarios y sin directorios, puede hacer
grepla salida de esta manera,Shellscript
rsync-diffEsta línea única puede convertirse en el comando central de un shellscript
rsync-diff.fuente
Como mencionó "Claramente, no es obligatorio usar diff",
Esto debería hacer el trabajo para que funden fácilmente configurable para qué tipo de tipos de archivos de ignorar:
además, otra alternativa sería escribir un script simple que se transfiera de una lista blanca a una lista negra y luego la lista negra se pasará al diff con la
--excludeopción.fuente
Con la sustitución de comandos de soporte de shell , puede usar el siguiente one-liner (como ya señaló @JammingThebBits):
Funciona así:
findbusque los archivos que no le interesan,sedextraiga el nombre base (la ejecuciónbasenamees extremadamente lenta si tiene muchos archivos) y los coloca en un archivo temporal ; dicho archivo se pasa adiffdecirle que los excluya de la comparación (doble exclusión = inclusión).Si no tiene sustitución de comando, coloque la
sedsalida en un archivo y páselo explícitamentediff.En el ejemplo, busqué solo archivos XML y JAVA, cambiélos según sea necesario separándolos con OR.
fuente