¿Cómo puedo "diff" dos archivos con Nautilus?

16

He instalado Meld y descubrí que es una gran herramienta de comparación. Desafortunadamente no hay integración con Nautilus 3.2. Esto significa que no puedo hacer clic derecho en los archivos y seleccionar una opción para abrirlos en Meld para comparar.

He visto en el comentario de las herramientas que la herramienta necesita que se instale el paquete diff-ext . Supongo que este paquete se ha eliminado del universo de Ubuntu porque gtk 3.0. Incluso si descargué manualmente desde la fuente, forje el paquete diff-ext , cuando trato de configurarlo, la verificación falla con el mensaje:

checking for DIFF_EXT... configure: error: Package requirements (libnautilus-extension >= 2.14.0 gconf-2.0 >= 2.14.0 gnome-vfs-module-2.0 >= 2.14) were not met:

No package 'libnautilus-extension' found
No package 'gconf-2.0' found
No package 'gnome-vfs-module-2.0' found

Ok, de esta salida deduzco que, de hecho, se requiere gtk 2 para instalar la extensión diff en nautilus.

Ahora, mi pregunta es: ¿Existe la posibilidad de integrar Meld en Nautilus? ¿O hay alguna otra herramienta basada en diferencias que se integre con Nautilus actual? Tan basado en GTK3.

Estoy usando Ubuntu 11.10 si había alguna duda hasta ahora.

bioShark
fuente

Respuestas:

20

Hay una extensión útil de Python que incorpora Meld en Nautilus

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

cómo instalar

Obtenga la fuente o el paquete deb del sitio web de los autores .

wget http://www.giuspen.com/software/nautilus-pyextensions_3.4.1-1_all.deb

sudo apt-get install python-nautilus
sudo dpkg -i nautilus-pyextensions_3.4.1-1_all.deb

Busque pyextension en Dash y ejecute Nautilus PyExtension .

Active la extensión de fusión (instálela si se le solicita) y haga clic en la opción de reiniciar la barra de herramientas Nautilus.

Error de GConf

En caso de que encuentre un error relacionado con GConf cuando intente abrir Nautilus PyExtension, instale "gobject-introspection" y "gir1.2-gconf-2.0":

sudo apt-get install gobject-introspection
sudo apt-get install gir1.2-gconf-2.0
fossfreedom
fuente
Gracias, este trabajo genial. Además, gracias por tomarse el tiempo para hacer las capturas de pantalla y hacer la descripción de instalación rápida. Siempre es bueno obtener respuestas de usted.
bioShark
meldes super-duper impresionante. Gran consejo de integración.
belacqua
11

También puede instalar el paquete nautilus-compare, disponible (comenzando con Ubuntu 12.04) desde los repositorios de paquetes estándar de Ubuntu: ejecute lo siguiente desde un terminal:

sudo apt-get install nautilus-compare

Esto proporciona opciones de menú nautilus para comparaciones de 2 y 3 vías. Meld se usa por defecto, pero se puede usar cualquier aplicación diff definida por el usuario.

Una ventaja significativa de esta solución es que se pueden comparar archivos o carpetas ubicados en diferentes directorios (por ejemplo, /home/user/a/b/c/file.txty /home/user/d/e/f/otherfile.txtse pueden abrir en diferentes ventanas de Nautilus y comparar entre sí).

marca
fuente
3

Guión Nautilus

Una alternativa más fácil y más eficiente para instalar una extensión dedicada sería usar un script de Nautilus como el siguiente:

#!/bin/bash
meld "$@"

Instrucciones de instalación: ¿Cómo puedo instalar un script Nautilus?

Glutanimato
fuente
Esta es fácilmente la mejor solución. Evita la instalación de otros paquetes y gastos generales relacionados. Gracias, @Glutanimate.
U2n
2

Usando Nautilus para comparar el archivo con el portapapeles que contiene texto

Esta respuesta se usa principalmente para comparar un archivo con un texto en el portapapeles que se copió de Internet. Sin embargo, el texto del portapapeles podría haberse copiado de otro archivo en su sistema, lo que lo convierte en una respuesta elegible.

Las diferencias de archivo se resaltan usando el diffcomando nativo de bash y luego se muestran usando gedit. Sin meldembargo, esto puede modificarse a cualquier otro paquete de terceros.

Esta respuesta utiliza la función incorporada de Nautilus para ejecutar un script personalizado después de seleccionar un archivo:

#!/bin/bash

# NAME: clipboard-diff
# PATH: $HOME/.local/share/nautilus/scripts
# DESC: Find differences bewteen selected file on disk and clipboard.
# CALL: Called from Nautilus file manager.
# DATE: March 18, 2017. Modified: March 31, 2017.

# NOTE: The clipboard would contain text highlighted on website and copied
#       with <ctrl>+<C>. Requires command `xclip` to be installed.

# Must have the xclip package. On Ubuntu 16.04, not installed by default
command -v xclip >/dev/null 2>&1 || { zenity --error --text "Install xclip using: 'sudo apt install xclip' to use this script.  Aborting."; exit 99; }

# strip new line char passed by Nautilus
FILENAME=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed -e 's/\r//g')

# Multiple files can't be selected.
LINE_COUNT=$(wc -l <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
LINE_COUNT=$((LINE_COUNT-1))

if [[ $LINE_COUNT > 1 ]] ; then
    zenity --error --text "Ony one file can be selected at a time! "
    exit 1
fi

# Object type must be "file..." (ie no directories, etc.)
if [ -d "${FILENAME}" ] ; then
    zenity --error --text "$FILENAME is a directory!";
    exit 1
else
    if [ -f "${FILENAME}" ]; then
        : # Bash noop
    else
        zenity --error --text "${FILENAME} is not a file!";
        exit 2
    fi
fi

# Get clipboard contents into working file
workfile="/tmp/clipboard-work-"$(date +%s)
xclip -o > $workfile

# Create temporary file name so two or more open instances won't clash
differences="/tmp/clipboard-diff-"$(date +%s)

# Compare file differences
# -q brief -B ignore blank lines, -u only differences
diff --unified=2 -w -b -B -I --suppress-blank-empty \
        --suppress-common-lines --ignore-all-space \
        ${FILENAME} $workfile > $differences

# If file doesn't exist, errors in diff parameters
# If file size =0 there were no differences
if [[ -f $differences ]] ; then
    if [[ -s $differences ]] ; then
        # File not empty.
        gedit $differences
    else    
        zenity --info --text "$workfile matches $differences"
    fi
else
    zenity --error --text "cliboard-diff - error in diff parameters."
fi

# clean up /tmp directory
rm $workfile
rm $differences

exit 0

NOTA: Desarrollé este script Nautilus hace un par de semanas y tenía la intención de publicarlo como un nuevo Q&A, pero he estado presionado por el tiempo y no estaba seguro de si alguien realmente estaría tan interesado en él.

Salida de muestra

portapapeles-diff 1

En este ejemplo, estamos comparando el script real publicado aquí en AU antes del 31 de marzo de 2017 con la versión revisada el 31 de marzo de 2017. Observe cómo se configuraron la nueva información y los mensajes de error.

El diffcomando es muy poderoso y, como tal, tiene una gran cantidad de parámetros de control. Escriba man diffel terminal para las páginas del manual o info diffpara obtener más detalles sobre el uso de comandos.

WinEunuuchs2Unix
fuente