Nautilusで2つのファイルを「差分」するにはどうすればよいですか?


16

Meldをインストールしましたが、これがすばらしい比較ツールであることがわかりました。残念ながら、Nautilus 3.2との統合はありません。つまり、ファイルを右クリックして、比較のためにMeldで開くオプションを選択することはできません。

ツールには、diff-extパッケージをインストールする必要があるというコメントがあります。このパッケージは、Ubuntuユニバースから削除されました。gtk3.0なので推測します。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

それでは、この出力から、diff拡張機能をnautilusにインストールするためにgtk 2が実際に必要であることがわかります。

さて、私の質問は、MeldをNautilusに統合する可能性はありますか?または、現在のNautilusと統合する他のdiffベースのツールはありますか?だからgtk3ベース。

これまで疑問があれば、Ubuntu 11.10を使用しています。

回答:


20

NautilusにMeldを組み込む便利なPython拡張機能があります

ここに画像の説明を入力してください

ここに画像の説明を入力してください

インストールする方法

著者のウェブサイトからソースまたは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を実行します。

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

ありがとう、この仕事は素晴らしい。さらに、スクリーンショットを作成し、クイックインストールの説明を作成していただき、ありがとうございます。あなたから答えを得るために常に良い。
bioShark

meld超素晴らしいです。優れた統合のヒント。
ベラク

11

また、標準のUbuntuパッケージリポジトリから(Ubuntu 12.04以降で)利用可能なnautilus-compareパッケージをインストールすることもできます。ターミナルから次を実行します。

sudo apt-get install nautilus-compare

これは、2者間および3者間比較のためのnautilusメニューオプションを提供します。デフォルトではMeldが使用されますが、任意のユーザー定義の差分アプリケーションを使用できます。

このソリューションの重要な利点は1つが別のディレクトリにあるファイルやフォルダを比較することができます(例えばということです/home/user/a/b/c/file.txtし、/home/user/d/e/f/otherfile.txt別のNautilusのウィンドウで開かれ、相互に比較することができます)。


3

ノーチラススクリプト

専用の拡張機能をインストールするより簡単で効率的な代替手段は、次のようなNautilusスクリプトを使用することです。

#!/bin/bash
meld "$@"

インストール手順:Nautilusスクリプトをインストールするにはどうすればよいですか?


これは簡単に最適なソリューションです。さらに他のpkgのインストールおよび関連するオーバーヘッドを回避します。ありがとう、グルタニメート。
u2n

2

Nautilusを使用して、ファイルをテキストを含むクリップボードと比較する

この回答は主に、ファイルをインターネットからコピーされたクリップボード内のテキストと比較するために使用されます。ただし、クリップボードのテキストはシステム上の別のファイルからコピーされている可能性があります。これが適切な回答となります。

ファイルの違いはbashのネイティブdiffコマンドを使用して強調表示され、次にを使用して表示されますgeditmeldただし、これは他のサードパーティパッケージに変更することもできます。

この回答では、ファイルを選択した後に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スクリプトを開発し、新しいQ&Aとして投稿するつもりでしたが、時間が迫られており、本当に興味がある人がいるかどうかはわかりませんでした。

サンプル出力

クリップボード差分1

この例では、2017年3月31日より前にここに投稿された実際のスクリプトを2017年3月31日に改訂されたバージョンと比較しています。新しい情報とエラーメッセージがどのように設定されたかに注目してください。

このdiffコマンドは非常に強力であるため、無数の制御パラメーターがあります。タイプman diffマニュアルページまたはターミナルでinfo diff、より一層コマンドの使用方法の詳細について。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.