diff no funcionará de forma recursiva

diff no funcionará de forma recursiva

Estoy intentando diferenciar recursivamente dos directorios usando la diffutilidad de línea de comando. Tengo dos carpetas, diff1y diff2, con contenidos como este:

ingrese la descripción de la imagen aquí

diff2esta vacio. Pero cuando lo hago diff -r diff1 diff2solo obtengo

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

Esto es desconcertante. ¿Qué debo hacer para empezar diffa trabajar de forma recursiva? Lo he intentado --recursive, pero eso no ayuda. Estoy en El Capitán y diff -vme 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 footanto en como diff1en diff2. La recursividad significa que su comando original diff -r diff1 diff2en 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 diffes posible una implementación que realmente llame a un ejecutable). Aún así, lógicamente es así.

Tienes diff1/folderpero no hay diff2/folder. ¿Cómo puedes llamar diffpara 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 diffno puede descender a foldersin convertirse en algo así como recursivo lso find. Ser recursivo lso findno es su trabajo.

Aún así puedes consultar diff1/foldercon ls -Ro find(recursivo por defecto), después de aprender de diffeso Only in diff1: folder.

información relacionada