如何用Nautilus“比较”两个文件?


16

我已经安装了Meld,发现它是一个很好的比较工具。不幸的是,没有与Nautilus 3.2集成。这意味着,我无法右键单击文件并选择一个选项以在“混合”中打开它们进行比较。

我在工具注释中看到该工具需要安装diff-ext软件包。我猜是因为gtk 3.0,该软件包已从Ubuntu宇宙中删除。即使我从源代码手动下载了diff-ext软件包,当我尝试对其进行配置时,检查也会失败并显示以下消息:

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

好的,因此从此输出中,我确实确实需要gtk 2才能将diff扩展安装到nautilus。

现在,我的问题是:是否可以将Meld集成到Nautilus中?或者,是否还有其他与当前Nautilus集成的基于差异的工具?因此基于gtk3。

到目前为止,如果有任何疑问,我将使用Ubuntu 11.10。

Answers:


20

有一个有用的python扩展,将Meld合并到Nautilus中

在此处输入图片说明

在此处输入图片说明

如何安装

作者网站获取源文件或deb软件包。

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

在Dash中搜索pyextension并运行Nautilus PyExtension

激活融合扩展名(如果要求,请安装它),然后单击重新启动Nautilus工具栏选项。

GConf错误

如果尝试打开Nautilus PyExtension时发现与GConf相关的错误,请安装“ gobject-introspection”和“ gir1.2-gconf-2.0”:

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

谢谢,这项工作很棒。另外,感谢您花时间制作屏幕快照并进行快速安装说明。总是很高兴从您那里得到答案。
bioShark 2012年

meld超级傻瓜棒。很棒的整合技巧。
belacqua

11

您还可以安装nautilus-compare软件包,该软件包可从标准Ubuntu软件包存储库中获得(从Ubuntu 12.04开始)-在终端上运行以下命令:

sudo apt-get install nautilus-compare

这为2向和3向比较提供了鹦鹉螺菜单选项。默认情况下使用Meld,但是可以使用任何用户定义的diff应用程序。

该解决方案的一个显着优点是,可以比较位于不同目录中的文件或文件夹(例如/home/user/a/b/c/file.txt/home/user/d/e/f/otherfile.txt可以在不同的Nautilus窗口中打开它们,并且可以相互比较)。


3

鹦鹉螺脚本

安装专用扩展的一种更简单,更有效的替代方法是使用Nautilus脚本,如下所示:

#!/bin/bash
meld "$@"

安装说明:如何安装Nautilus脚本?


这无疑是最好的解决方案。它避免了安装其他pkg和相关的开销。谢谢,@ Glutanimate。
u2n 2014年

2

使用Nautilus将文件与包含文本的剪贴板进行比较

该答案主要用于将文件与剪贴板中从Internet复制的文本进行比较。剪贴板中的文本可能已经从系统上的另一个文件中复制了,这使它成为合格的答案。

使用bash的本机diff命令突出显示文件差异,然后使用显示差异gedit。但是,可以将其修改为meld或任何其他第三方程序包。

选择文件后,此答案使用Nautilus的内置函数来运行自定义脚本:

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

注意:我几周前开发了此Nautilus脚本,一直想将其发布为新的问答集,但时间紧迫,不确定是否有人真的会对它感兴趣。

样品输出

剪贴板差异1

在此示例中,我们将2017年3月31日之前在澳大利亚发布的实际脚本与2017年3月31日修订的版本进行比较。请注意如何设置新信息和错误消息。

diff命令非常强大,因此具有无数的控制参数。键入man diff在所述终端针对所述手册的页面或info diff更多更命令的用法的细节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.