
Estoy intentando diferenciar recursivamente dos directorios usando la diff
utilidad de línea de comando. Tengo dos carpetas, diff1
y diff2
, con contenidos como este:
diff2
esta vacio. Pero cuando lo hago diff -r diff1 diff2
solo obtengo
$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html
Esto es desconcertante. ¿Qué debo hacer para empezar diff
a trabajar de forma recursiva? Lo he intentado --recursive
, pero eso no ayuda. Estoy en El Capitán y diff -v
me atrapa diff (GNU diffutils) 2.8.1
.
Respuesta1
El comportamiento que experimentó es por diseño. No creo que puedas conseguir lo que quieres, a menos que permitas herramientas distintas a diff
. De tu comentario:
Cuando leo "recursivamente", asumo que el proceso no se detendrá en el primer nivel.
No se detiene por el primer nivel. Tenga en cuenta lo que significa recursividad:
usando funciones quellamarse a sí mismos desde dentro de su propio código
(fuente:aquí; énfasis mío)
Imagine que tiene un subdirectorio común foo
tanto en como diff1
en diff2
. La recursividad significa que su comando original diff -r diff1 diff2
en algún momento llama
diff -r diff1/foo diff2/foo
Bien, en la práctica esto probablemente se hace mediante una subrutina que se llama a sí misma dentro de un solo proceso (pero supongo que diff
es posible una implementación que realmente llame a un ejecutable). Aún así, lógicamente es así.
Tienes diff1/folder
pero no hay diff2/folder
. ¿Cómo puedes llamar diff
para compararlos? En otras palabras, ¿cuál debería <unknown_name>
ser para obtener el resultado deseado del siguiente formulario?
diff -r diff1/folder diff2/<unknown_name>
No hay ninguno <unknown_name>
que encaje. Lo recursivo diff
no puede descender a folder
sin convertirse en algo así como recursivo ls
o find
. Ser recursivo ls
o find
no es su trabajo.
Aún así puedes consultar diff1/folder
con ls -R
o find
(recursivo por defecto), después de aprender de diff
eso Only in diff1: folder
.