2012-04-12 23 views
18

¿Cómo se puede realizar un diff recursivo de los archivos en dos directorios (ayb):incluir sólo los archivos que coinciden con un patrón dado en un diff recursivo

$ diff -r a b 

pero sólo un vistazo a los archivos cuyo nombre coincide con una patrón dado Por ejemplo, usando la misma sintaxis disponible en el comando find, este sería el resultado:

$ diff -r a b -name "*crazy*" 

que mostraría diferenciaciones entre los archivos con el mismo nombre y la ruta de A y B, que tiene "loco" en su nombre .

Efectivamente, estoy buscando lo contrario de la opción --exclude que está disponible en diff.

+0

Estoy de acuerdo en que esto sería útil. 'grep' tiene un indicador' --include' – xdhmoore

Respuesta

11

Quizás esto es un poco indirecto, pero debería funcionar. Puede utilizar find para obtener una lista de archivos que No coinciden con el patrón, y luego "excluir" a todos esos archivos:

find a b -type f ! -name 'crazy' -printf '%f\n' | diff -r a b -X - 

El -X - hará diff leer los patrones de la entrada estándar y no incluyen cualquier cosa que partidos. Esto debería funcionar siempre que sus archivos no tengan caracteres divertidos como * o ? en sus nombres. El único inconveniente es que su diff no incluirá el comando find, por lo que el comando enumerado diff no es tan útil.

(solo lo he probado con GNU find y diff).

EDITAR:

Desde único no-GNU find no tiene -printf, sed podría ser utilizado como una alternativa:

find a b -type f ! -name '*crazy*' -print | sed -e 's|.*/||' | diff -X - -r a b 

Eso también es suponiendo que no GNU diff tiene -X cuales No lo sé.

+0

Desafortunadamente, esto tiene que funcionar en Mac OS X, y veo desde http://stackoverflow.com/questions/752818/why-does-macs-find-not-have -the-option-printf que BSD's find no tiene una opción -printf. Así que aparentemente no hay forma de hacer un BSD y un comando compatible con GNU. –

+1

@ EdwardD'Souza actualizado para no utilizar '-printf' – FatalError

+0

@ EdwardD'Souza Considere [MacPorts] (http://www.macports.org/) si desea obtener herramientas de GNU en OSX. –

Cuestiones relacionadas