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

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

我安装了 Meld,发现它是一款很棒的比较工具。遗憾的是,它无法与 Nautilus 3.2 集成。这意味着,我无法右键单击文件并选择在 Meld 中打开它们进行比较。

我在工具评论中看到该工具需要差异文本要安装的软件包。这个软件包已从 Ubuntu 世界中移除,我猜是因为 gtk 3.0。即使我从源代码伪造手动下载了差异文本包,当我尝试配置它时,检查失败并显示以下消息:

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 中?或者,是否有其他基于 diff 的工具可以与当前的 Nautilus 集成?那么基于 gtk3。

如果到目前为止有任何疑问的话,我正在使用 Ubuntu 11.10。

答案1

有一个实用的 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

搜索pyextension在 Dash and run 中Nautilus Py扩展

激活 meld 扩展(如果询问则安装)并单击重新启动 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

答案2

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

sudo apt-get install nautilus-compare

这为 nautilus 菜单提供了双向和三向比较选项。默认使用 Meld,但也可以使用任何用户定义的 diff 应用程序。

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

答案3

Nautilus 脚本

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

#!/bin/bash
meld "$@"

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

答案4

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

此答案主要用于将文件与从互联网复制的剪贴板中的文本进行比较。不过,剪贴板中的文本可能是从系统上的另一个文件复制而来——这使此答案成为合格答案。

使用 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 日之前在 AU 中发布的实际脚本与 2017 年 3 月 31 日修订的版本进行比较。请注意如何设置新信息和错误消息。

diff命令非常强大,因此具有大量控制参数。man diff在终端中输入可查看手册页或info diff了解更多命令使用详情。

相关内容