How can I "diff" two files with Nautilus?

8,173

Solution 1

There is a useful python extension that incorporates Meld into Nautilus

enter image description here

enter image description here

how to install

Obtain the source or the deb package from the authors website.

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

Search for pyextension in Dash and run Nautilus PyExtension.

Activate the meld extension (install it if asked) and click the restart Nautilus toolbar option.

GConf error

In case you find an GConf related error when trying to open Nautilus PyExtension, install "gobject-introspection" and "gir1.2-gconf-2.0":

sudo apt-get install gobject-introspection
sudo apt-get install gir1.2-gconf-2.0

Solution 2

You can also install the nautilus-compare package, available (starting with Ubuntu 12.04) from the standard Ubuntu package repositories -- run the following from a terminal:

sudo apt-get install nautilus-compare

This provides nautilus menu options for 2-way and 3-way comparisons. Meld is used by default, but any user-defined diff application can be used.

A significant advantage of this solution is that one can compare files or folders located in different directories (e.g. /home/user/a/b/c/file.txt and /home/user/d/e/f/otherfile.txt can be opened in different Nautilus windows, and compared against each other).

Solution 3

Nautilus script

An easier and more efficient alternative to installing a dedicated extension would be using a Nautilus script like the following one:

#!/bin/bash
meld "$@"

Installation instructions: How can I install a Nautilus script?

Solution 4

Using Nautilus to compare file to clipboard containing text

This answer is primarily used to compare a file to text in the clipboard that was copied from the internet. The clipboard text could have been copied from another file on your system though--making this an eligible answer.

File differences are highlighted using bash's native diff command and then displayed using gedit. This can be modified to meld or any other third party package though.

This answer uses Nautilus's built-in function to run a custom script after selecting a file:

#!/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

NOTE: I developed this Nautilus script a couple weeks ago and have been meaning to post it as a new Q&A but have been pressed for time and was unsure if anyone would really be all that interested in it.

Sample output

clipboard-diff 1

In this example we're comparing the actual script posted here in AU prior to March 31, 2017 to the version revised on March 31, 2017. Notice how new information and error messages were setup.

The diff command is very powerful and as such has a myriad of control parameters. Type man diff in the terminal for the manual pages or info diff for more even more command usage details.

Share:
8,173

Related videos on Youtube

bioShark
Author by

bioShark

Updated on September 18, 2022

Comments

  • bioShark
    bioShark almost 2 years

    I have installed Meld and found out it's a great comparing tool. Unfortunately there is no integration with Nautilus 3.2. This means, I can't right click on files and select an option to open them in Meld for comparison.

    I have seen in the tools comment that the tool need the diff-ext package to be installed. This package has been removed from Ubuntu universe, I am guessing because gtk 3.0. Even if I manually downloaded from source forge the diff-ext package, when I try to configure it the check fails with the message:

    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, so from this output I gather that indeed gtk 2 is being required to install the diff extension to nautilus.

    Now, my question is: Is there a possibility to integrate Meld into Nautilus? Or, are there any other diff based tool which integrate with current Nautilus? So gtk3 based.

    I am using Ubuntu 11.10 if there was any doubt so far.

  • bioShark
    bioShark over 12 years
    Thank you, this work great. Plus, thank you for taking the time to make the screen shots and make the quick install description. Always good to get answers from you.
  • belacqua
    belacqua about 12 years
    meld is super-duper awesome. Great integration tip.
  • u2n
    u2n over 10 years
    This is easily the best solution. It avoids install of yet other pkgs and related overhead. Thanks, @Glutanimate.