Tiện ích DIFF hoạt động cho 2 tệp. Làm thế nào để so sánh nhiều hơn 2 tệp cùng một lúc?


84

Vì vậy, tiện ích Diff hoạt động giống như tôi muốn cho 2 tệp, nhưng tôi có một dự án yêu cầu so sánh với nhiều hơn 2 tệp cùng một lúc, có thể lên đến 10 tệp cùng một lúc. Điều này yêu cầu tất cả các tệp đó nằm cạnh nhau. Nghiên cứu của tôi chưa thực sự bật mí được điều gì, vimdiff có vẻ là tốt nhất cho đến nay với khả năng so sánh 4 cùng một lúc.

Câu hỏi của tôi: Có tiện ích nào để so sánh nhiều hơn 2 tệp cùng một lúc, hoặc một cách để hack diff / vimdiff để nó có thể thực hiện nhiều phép so sánh không? Các tệp tôi sẽ so sánh tương đối ngắn nên không quá chậm.

Cảm ơn trước!

Câu trả lời:


111

Có thể dễ dàng thực hiện hiển thị 10 tệp cạnh nhau và làm nổi bật sự khác biệt với Diffuse . Chỉ cần chỉ định tất cả các tệp trên dòng lệnh như sau:

khuếch tán 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt


1
Wow điều này thật tuyệt vời! Cảm ơn vì đã trả lời dù muộn, tôi vẫn cần sự giúp đỡ.
Javed Ahamed

1
Kiểu so sánh này được gọi là gì?
leeand00

4
Công cụ tuyệt vời; chỉ giúp tôi giải quyết một vấn đề khó chịu. Tôi biết đó là một câu trả lời cũ hơn, nhưng cảm ơn bạn!
SeanKilleen

Xin cảm ơn một ngàn lần! Đã giúp đỡ rất nhiều để tìm ra sự khác biệt nhỏ trong một loạt các tệp sao chép.
Trass3r

1
@Gruber - Tôi phải truy cập liên kết vào một thời điểm xấu - Tôi đã xóa nhận xét của mình
combatc2

28

Vim đã có thể làm điều này:

vim -d file1 file2 file3

Nhưng bạn thường bị giới hạn ở 4 tệp. Tuy nhiên, bạn có thể thay đổi điều đó bằng cách sửa đổi một dòng duy nhất trong nguồn của Vim. Hằng số DB_COUNTxác định số lượng tệp khác biệt tối đa và nó được xác định ở phía trên cùng diff.ctrong phiên bản 6.x trở về trước, hoặc khoảng hai phần ba chiều xuống structs.htrong phiên bản 7.0 trở lên.


vimdiff hoặc vim -d chỉ có thể tạo 4 tệp cùng một lúc ít nhất trên máy tính của tôi. bất cứ ai biết làm thế nào để bỏ qua điều này?
Javed Ahamed

Tôi không nhận thấy đề cập đến điều đó trong câu hỏi. Cập nhật để bao gồm hướng dẫn về việc thay đổi giới hạn của Vim.
Noah Medling

Này, bạn có biết cách thực sự truy cập structs.h hoặc diff.c không? Tôi không thể tìm thấy mã nguồn vim trên Win hoặc Linux.
Javed Ahamed

vim dường như không có khả năng thực hiện so sánh thư mục cho nhiều hơn hai thư mục, điều này hạn chế tính hữu ích. Một hạn chế nữa là khi các tệp được so sánh với nhau, bạn chỉ có thể nhìn thấy phía bên trái của tệp, không có thanh cuộn để xem mọi thứ. Và không có phương pháp GUI để đẩy các thay đổi qua lại.
Jereme Guenther

7

diffcó tùy chọn tích hợp --from-file--to-fileso sánh một toán hạng với tất cả các toán hạng khác.

   --from-file=FILE1
          Compare FILE1 to all operands.  FILE1 can be a directory.

   --to-file=FILE2
          Compare all operands to FILE2.  FILE2 can be a directory.

Ước gì tôi có thể làm cho điều này hoạt động với quá trình thay thế thay vì đường dẫn tệp thực.
Jan Kyu Peblik

1
@JanKyuPeblik Nếu bạn sử dụng zsh, hãy xem = (...) biểu mẫu thay thế quy trình ghi đầu ra vào tệp tạm thời và mở rộng thành tên của tệp tạm đó là zsh.sourceforge.net/Doc/Release/…
Eric Freese

2

Kiểm tra "Ngoài so sánh": http://www.scootersoftware.com/

Nó cho phép bạn so sánh toàn bộ thư mục của các tệp và có vẻ như nó cũng chạy trên Linux.


1
diff -r cũng so sánh toàn bộ thư mục của file, nhưng nó chỉ bao giờ so sánh các tập tin từ một driectory chống lại các tập tin từ thư mục khác
reinierpost

6
Beyond Compare là một công cụ tuyệt vời và tôi sử dụng nó mọi lúc để giải quyết các xung đột hợp nhất. Tuy nhiên, nó không phải là công cụ phù hợp cho công việc này, vì nó chỉ có thể so sánh hai tệp với nhau hoặc chống lại một tổ tiên chung.
Superole 27/07/17

Xin lỗi vì -1, nhưng đây là về việc so sánh nhiều tệp với nhau.
Manohar Reddy Poreddy

1

nếu bạn đang chạy nhiều khác biệt dựa trên một tệp, bạn có thể thử viết một tập lệnh có vòng lặp for để chạy qua từng thư mục và chạy khác biệt. Mặc dù nó sẽ không ở cạnh nhau nhưng ít nhất bạn cũng có thể so sánh chúng một cách nhanh chóng. hy vọng rằng đã giúp.


vâng, nhưng nếu tôi đang so sánh ví dụ 3 tệp, tôi sẽ muốn tất cả chúng khác với từng tệp trong 2 tệp còn lại, vì khác biệt sẽ sắp xếp lại để xem chúng khớp ở đâu.
Javed Ahamed

Tôi tìm thấy lệnh này có thể giúp ích cho tập lệnh của bạn, nó được gọi là diff3 và được cho là tiện ích để so sánh ba tệp. linux.about.com/library/cmd/blcmdl1_diff3.htm phiên bản cửa sổ có thể được tìm thấy ở đây gnuwin32.sourceforge.net/packages/diffutils.htm
Benjamin Neil

0

Không trả lời câu hỏi chính, nhưng đây là một cái gì đó tương tự như những gì Benjamin Neil đã đề xuất nhưng khác với tất cả các tệp:

Lưu trữ tên tệp trong một mảng, sau đó lặp lại các kết hợp của kích thước hai và khác nhau (hoặc làm bất cứ điều gì bạn muốn).

files=($(ls -d /path/of/files/some-prefix.*))     # Array of files to compare
max=${#files[@]}                                  # Take the length of that array
for ((idxA=0; idxA<max; idxA++)); do              # iterate idxA from 0 to length
  for ((idxB=idxA + 1; idxB<max; idxB++)); do     # iterate idxB + 1 from idxA to length
    echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for.
  done
done

Bắt nguồn từ câu trả lời của @ charles-duffy : https://stackoverflow.com/a/46719215/1160428


0

Có một cách đơn giản hay để làm điều này = GREP.

Tùy thuộc vào kích thước của văn bản, bạn có thể sao chép và dán nó hoặc bạn có thể chuyển hướng đầu vào của tệp đến lệnh grep. Nếu bạn tạo grep -vir / path để thực hiện tìm kiếm ngược lại hoặc grep -ir / path. Đây là cách của tôi cho các kỳ thi chứng chỉ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.