노틸러스로 두 파일을 어떻게 "차이"할 수 있습니까?


16

Meld를 ​​설치했고 그것이 훌륭한 비교 도구라는 것을 알았습니다. 불행히도 노틸러스 3.2와의 통합은 없습니다. 즉, 파일을 마우스 오른쪽 버튼으로 클릭하고 비교를 위해 Meld에서 열 수있는 옵션을 선택할 수 없습니다.

도구 의견에서 도구가 diff-ext 패키지를 설치 해야한다는 것을 알았습니다 . 이 패키지는 우분투 우주에서 제거되었습니다. gtk 3.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

자,이 출력에서 ​​실제로 gtk 2가 노틸러스에 diff 확장을 설치하는 데 필요하다는 것을 수집합니다.

이제 내 질문은 : Meld를 ​​노틸러스에 통합 할 가능성이 있습니까? 아니면 현재 노틸러스와 통합 된 다른 diff 기반 도구가 있습니까? 따라서 gtk3 기반.

지금까지 의심이 든다면 우분투 11.10을 사용하고 있습니다.

답변:


20

Meld를 ​​노틸러스에 통합하는 유용한 파이썬 확장이 있습니다

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

설치하는 방법

저자 웹 사이트 에서 소스 또는 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 을 검색 하고 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슈퍼 듀퍼 굉장합니다. 훌륭한 통합 팁.
belacqua

11

표준 Ubuntu 패키지 저장소에서 사용 가능한 nautilus-compare 패키지 (Ubuntu 12.04로 시작)를 설치할 수도 있습니다 (터미널에서 다음을 실행).

sudo apt-get install nautilus-compare

이 방법은 2-way 및 3-way 비교를위한 노틸러스 메뉴 옵션을 제공합니다. 기본적으로 Meld가 사용되지만 모든 사용자 정의 diff 응용 프로그램을 사용할 수 있습니다.

이 솔루션의 중요한 장점은 하나의 파일이나 다른 디렉토리에 폴더를 비교할 수 있습니다 (예를한다는 것입니다 /home/user/a/b/c/file.txt/home/user/d/e/f/otherfile.txt서로 다른 노틸러스 창에서 열, 비교 될 수있다).


3

노틸러스 스크립트

전용 확장을 설치하는보다 쉽고 효율적인 대안은 다음과 같은 노틸러스 스크립트를 사용하는 것입니다.

#!/bin/bash
meld "$@"

설치 지침 : 노틸러스 스크립트는 어떻게 설치합니까?


이것은 가장 좋은 해결책입니다. 다른 pkg 및 관련 오버 헤드의 설치를 피합니다. 감사합니다, @Glutanimate.
u2n

2

노틸러스를 사용하여 파일을 텍스트가 포함 된 클립 보드와 비교

이 답변은 주로 인터넷에서 복사 한 클립 보드의 텍스트와 파일을 비교하는 데 사용됩니다. 그러나 클립 보드 텍스트는 시스템의 다른 파일에서 복사되어 적절한 답변이 될 수 있습니다.

파일 차이는 bash의 기본 diff명령을 사용하여 강조 표시된 다음을 사용하여 표시됩니다 gedit. meld그래도 다른 타사 패키지 로 수정할 수 있습니다 .

이 답변은 파일을 선택한 후 노틸러스의 내장 기능을 사용하여 사용자 지정 스크립트를 실행합니다.

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

참고 : 몇 주 전에이 노틸러스 스크립트를 개발하여 새로운 Q & A로 게시하려고했지만 시간이 지남에 따라 관심이있는 사람이 누구인지 확실하지 않았습니다.

샘플 출력

클립 보드 차이 1

이 예에서는 2017 년 3 월 31 일 이전에 AU에 게시 된 실제 스크립트를 2017 년 3 월 31 일에 개정 된 버전과 비교합니다. 새로운 정보 및 오류 메시지가 어떻게 설정되었는지 확인하십시오.

diff명령은 매우 강력하며 수많은 제어 매개 변수가 있습니다. man diff매뉴얼 페이지 또는 info diff더 많은 명령 사용법 에 대한 터미널을 입력 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.