DirComp - Utilidad para comparar dos directorios


La utilidad DirComp compara dos directorios (y - si especificado - sus directorios bajos). Se puede compara para la existencia o para la fecha (del cambio último; siguente llamada "timestamp") o para el contenido.

El exito está el numero de los ficheros diferentes 1 (excepto especificado diferente).

Modo de empleo:

    DirComp [<Option(s)> ...] directorio-original directorio-nuevo
    DirComp --daemon[[=]<port>]
    DirComp --server[[=]<port>]

con sentido siguente de los parámetros:

    Opción ....... Opciónes de control por el programa
        -s, --recursive ....... Compara también directories bajos
        -E, --rec-equal ....... Compara solamente directorios bajos con nombres iguales
        -n, --no-changed ...... Supresa ficheros más joven o más viejo
        -N, --existing ........ Supresa ficheros borrado o nuevo
        -e, --equal ........... Visualiza también ficheros iguales
        -d, --show-dirs ....... Visualiza directorios con fechas diferentes
        -v, --verbose ......... Visualiza la fecha de los ficheros
        -H, --hidden .......... Incluye ficheros ocutles en la comparación
        -c, --compare ......... Compara el contenido de ficheros (diferentes) (si están legible)
        -C, --force-compare ... Compara el contenido de todo los ficheros (si están legible)
        -i, --include ......... <Fichero>: Limita la comparación a los ficheros especificados
        -x, --exclude ......... <Fichero>: Excluye los ficheros especificados de la comparación
        -I, --include-dirs .... <Ficheros>: Limita la comparación a los directorios especificados
        -X, --exclude-dirs .... <Ficheros>: Excluye los directorios especificados de la comparación
        -t, --begin-time ...... <Fecha>: Frontera baja del espacio del tiempo para la comparación
        -T, --end-time ........ <Fecha>: Frontera alta del espacio del tiempo para la comparación
        -V, --version ......... Informa de la versión
        -q, --quiet ........... Modo silencioso (no muestra información inecesaria)
        -Q, --silent .......... Modo más silencioso (no muestra ninguna salida)
        -a, --action .......... <Acción>: Performa acción a los ficheros encontrados (que están mostrado)
        -A .................... <Diferencia>[<Acción>]: Performa acción a los ficheros encontrados que pegan a la diferencia pasado
        -S, --server .......... [<puerto>]: Inicia como servidor (en el primer plano)
	-D, --deamon .......... [<puerto>]: Inicia como servidor (en el fondo)
        -r, --ret-changed ..... Returna el numero de ficheros cambiados (más joven o más viejo)
        -R, --ret-new ......... Returna el numero de los ficheros borrados o nuevos
        -h, -?, --help ........ Muestra esta ayuda, y finaliza
    Originaldir ... Directorio de origen (basis de la comparación)
    Comparedir .... Directorio de comparación (directorio nuevo)
    

La llamada de

    DirComp -d Test1 Test2

pudría resultar en (por ejemplo)

    Viejo  : DirComp.cpp
    Nuevo  : DynArray.h
    Joven  : Test
    Nuevo  : Another
    Borrado: Other
    Borrado: DirComp.Mak

La opción s compararía también los directorios bajos Test, Other y Another. Parecido es la opción E, solamente que la compara directorios bajos que existen en ambos directorios.

La opción n supresaría los líneas de Joven/Viejo; similario a la opción N, que supresaría los líneas de Nuevo/Borrado.

Para muestrar también ficheros iguales (que tienen los mismos nombres y fechas (y contenido, si está especificado)) la opción e tiene que especifado. Eso pudría resultar en salida como:

    Igual  : DirComp.h

Si la opción d no estaría especificado, la línea "Joven : Test " no estaría mostrado (eso es estándar, porque Test está un directorio quienes diferencia de tiempo lo no importa generalmente).

La opción v mostra el timestamp de todo los ficheros diferentes. Si el fichero comparado esiste en ambos directorios, los timestamps de los están mostrados.

La opción c compara los contenido de ficheros con timestamps diferentes (y dimensiónes iguales) y mostralos solamente si los están diferentes también.

La opción C compara los contenido de ficheros independete de sus timestamps. Ficheros diferentes (con timestamps iguales) causan la salida siguenta:

    Distinto: DirComp.cpp

Ficheros ocultos pueden ser incluido por la comparación con la opción H. Cuales ficheros los son dependende del sistema operativo; Unices oscuran ficheros que empezan con un punto (.), otros (como OS/2 o DOS y su colección grafico de bugs) tienen un atributo especial para marcarlos.

La opción i restricta la comparación a ficheros (no directorios!), que pegan la especificación pasado. Los fijadores de posiciónes asterisco (*) (significa cada numero de todos los letras) y el signo de interrogación (?) (significa cualquiera letra solo) están suportado. Además está posible especificar las letras validas en chorchetes ([) y (]), o por detallarlos o por especificar las fronteras, seperado por un menos (-). Para invertir esa selección usa una primera caret (^).

Análogo hay la opción x que excluya ficheros de la comparación.

Especificaciónes pueden ser combinado o por separadolos con la letra seperado del camino del sistema operativo (dos puntos (:) en Unices; punto y coma (;) en OS/2, DOS y Windoze) o por volver a usar la opción respectiva.

    p.e. -i*.cpp -i *.h -x*[^1-9].cpp:[A-EXYZ]*.cpp     para Unices
    p.e. -i*.cpp -i *.h -x*[^1-9].cpp;[A-EXYZ]*.cpp     para OS/2, DOS

Esas opciónes están inspectado de derecha a izquierda, entonces esribe las más generals al principio; si falta una opción para incluir ficheros, primero todo los ficheros/directorios están incluido (antes excluirlos).

Similar a las dos opción ultimas, I and X restrictan la comparación a los directorios especificado.

fijadores de posiciónes están suportado en más nivels para directorios; por ejemplo (para Unices) -I*/?0 incluye todo los directorios en segundo nivel que terminan con un 0; -XLinux/* no compara todo los directorios en el directorio Linux.

Si (al menos) uno de las ultimas opciónes está especificado, directorios bajos están comparado automatico (incluso si la opción s no estuvo especificado; hace sentido, ¿si no?).

Las opciónes t y T restrictan la comparación a ficheros que están en la área del los tiempos especificados (incluido los fronteras); t especifica la frontera baja y T la alta.

Esas opciónes expectan la fecha en el formato D.M.AAAA-h:m:s como parameter; cada de los valores puede ser serperado con cada letra non-numerico. Nota: No usa ceros primeros!

Nota: Si hay dos ficheros con nombres mismos, donde solamente uno está entre las fronteras, lo está reportado como nuevo (or borrado); ficheros afueros del los fronteras no existen (por lo menos para la utilitad)!

La opción V mostra informaciones adicionales sobre el programa (como fecha de la compilación y información sobre el escritor) y una descripción más detallado durante mostra la ayuda.

La opción q supresa las líneas adicionales (excepto - por supuesto - para la ayuda) y restricta por eso las salidas de informaciones sobre los ficheros (según los otros opciónes). Lo sirve para procesar las salidos automatico.

Útil para procesar automatico son también las opciónes r, R y Q. La ultima supresa todas las salidas del programa; la principia returna el numero del los ficheros cambiados (no los nuevos o borrados exactamente) y la segunda el numero de los nuevos o borrados (por defecto es todos los ficheros diferentes)1.

Las opciónes a y A permitan de especifar acciónes, que deben ser executado a los ficheros diferentes. En los paramaters para las acciónes los fijadores de posición siguentes son cambiado:

Fijadores de posiciónCambiados con

{OP}

Camino del fichero original

{OF}

Camino y nombre del fichero original

{CP}

Camino del fichero nuevo

{CF}

Camino y nombre del fichero nuevo

La opción A también necesita una necesita una especificación, para cual ficheros la acción debe ser ejecutado. Valores posibles (que pueden ser conectado con OR) son:

Change-IDAssociated files

1

Ficheros más joven

2

Ficheros más viejo

4

Ficheros diferentes (mismo timestamp pero contenido diferente según la opción C)

8

Ficheros iguales

16

Ficheros borrados

32

Ficheros nuevos

Si menos (-) es especificado como acción (o ninguno por A) no acción es performado (para actualizar el directorio original pudrías usar los commandos (equivalentes)):

    DirComp "-acp {CF} {OP}" -A26 . ..
    DirComp "-A37cp {CF} {OP} +1" . ..

Directorios pueden ser comparado sobre un red. Para hacerlo la utilidad tiene que iniciado como servidor (las opciónes S o D) on la maquina distante. El directorio es especificado como <servidor>:<directorio>[:<puerto>]. Un ejemplo es:

    DirComp /usr/local/src/DirComp prod:/usr/local/DirComp:4711

Al servidor prod la utilidad tiene que ser iniciado como:

    DirComp -D 4711

Para mostrar errors ocurado (y no solamente escribirlos al system-log), la opción D podría ser cambiado con S. El puerto por defecto para la comunicación es 31336.

Usa esa característica con cuidado porque la pudría producir informaciónes sobre la estructura de los directorios y los programas instalados (y sus versiones) a un agresor! Lo es la razon porque esa cualidad tiene que ser activado durante la compilación.


1: Nota: Unos systemas operativos restricta el valor del retorno (DOS: 1 único byte) y si lo pasa se consegue numeros falsos (y si lo resulta a un valor de cero incluso un sentido falso).


Markus Schwab (g17m0@lycos.com)