Obra:
diff -r -X <ignore-list> <src-dir> <dest-dir>
no parece hacer diff
ignorar entradas en <ignore-list>
si son de la forma <dir>/<file>
.
<file
Sin embargo, las entradas del formulario > se consideran. Este es un problema ya que podría tener varios archivos nombrados <file>
en diferentes subdirectorios, algunos de los cuales no quiero ignorar.
Tampoco parece haber mucha información sobre la sintaxis del patrón en la página de manual diff
. Por lo que puedo decir, es solo el nombre base de un archivo considerado por diff (consulte http://forums.gentoo.org/viewtopic-t-889788-start-0.html si está interesado).
diff
la--exclude
opción del hombre es una mierda ...Respuestas:
Listado de directorios debería funcionar; por ejemplo, esto es lo que he usado en un script (suponiendo que gnu diff),
... que ignora el contenido
.svn
y los.git
directorios, pero también los archivos individuales llamados*.zip
/*.gz
/ etc.Editar: para filtrar las rutas del formulario
dir_a/file1
pero aún losdiff
archivos con el mismo nombre base, comodir_b/file1
odir_a/b/file1
, entoncesdiff
se tendría que generar una lista de archivos (por ejemplo, usandofind
) y el archivo para comparar derivado de estas rutas; por ejemplo, dadogenera la lista de archivos para comparar, excluyendo, por ejemplo,
*/a/2.txt
pero aún comparando otros archivos nombrados2.txt
. Simplemente "encuentre" todos los archivos exceptoONE/a/2.txt
(una expresión regular también se puede usar aquí, como.*/a/2.txt
)que en efecto ignora
ONE/a/2.txt
(yTWO/a/2.txt
), pero aún compara los otros archivos llamados2.txt
:Editar: O, más divertido con
find
(diversión adicional dejada como un ejercicio para el lector), seleccione los archivos o directorios para excluir y luegodiff
todo lo demás:El ejemplo anterior excluye el archivo específico "{top} /a/2.txt", cualquier directorio llamado "b", y todo lo demás está diferido. (En lugar de "
-name b
" también podría usar "-regex '.*/b'
" - nota, sin seguimiento "/".)fuente
exclude
patrones se comparan con el nombre base de los archivos (según gnu.org/software/diffutils/manual/html_node/… ); los caminos no funcionarán (como enfoo/bar.txt
). Para hacer eso, es probable que deba ejecutarfind
para generar la lista de nombres de archivo y derivar la ruta del archivo para comparar.diff
, en lugar de usarbasename
find
, si la entradadiff
contiene un directorio, pasará y comparará los archivos dentro de ese directorio y es posible que deba ignorar algunos de estos archivos ... volver a la casilla 1.Tuve el mismo problema, así que creé un parche para
diff
. El parche aún no se ha aceptado, pero puede crear su propia versióndiff
con el parche o instalarlo en Arch Linux con un paquete AUR .Aquí está el
diff
parche.fuente
Para excluir el directorio
directory/sub-directory
, yo usoSin embargo, aunque debería funcionar para una sola exclusión, no debería ser posible para una larga lista de ignorados como lo ha hecho.
fuente
fuente