Chạy một sự khác biệt giữa các tập tin cục bộ và từ xa


39

Tôi đã kết nối với một máy chủ thông qua sshvà tôi muốn so sánh (giả sử với diff) một tệp cấu hình nhất định so với đối tác của nó trên một máy chủ khác, cũng có thể truy cập qua sshmà không cần phải tải xuống tệp từ xa trước khi chạy diff.


Bạn có thể gắn thư mục từ xa bằng cách sử dụng SSHFS, và sau đó truy cập nó như thể nó là cục bộ.
Barmar

Câu trả lời:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

Nguồn


1
Không phải đường ống chỉ tải xuống kết quả cat, mà thực tế chỉ là tệp gốc?
Stijn de Witt

1
đường ống sẽ đẩy kết quả của sshlệnh từ xa đến lệnh diffđang chờ để so sánh stdinvới localfile.
fduff

1
Có lẽ tôi đang hiểu sai yêu cầu 'mà không phải tải xuống tệp từ xa'. Tôi đoán OP có nghĩa là 'không cần phải tải xuống tệp từ xa theo cách thủ công'. :) EDIT: Ah, bạn là OP. :)
Stijn de Witt

@StijndeWitt, vâng, tôi muốn tránh phải quét tệp từ xa trước rồi mới làm khác ..
fduff

18

Thử:

diff local_file <(ssh user@server 'cat remote_file')

hoặc sử dụng vimdiff:

vimdiff local_file scp://server//path/to/remote_file

Có phải diff local_file <(ssh user@server 'cat remote_file')chỉ hoạt động cho SSH không mật khẩu? Tôi dường như không thể nhận được lời nhắc mật khẩu với nó ...
sdbbs

1
@sdbbs: Quá trình thay thế được chạy trong nền và đầu ra tiêu chuẩn được ghi vào đường ống có tên (hoặc đường dẫn có tên ẩn danh), vì vậy bạn không nhận được lời nhắc mật khẩu. Hãy thử cat <(ssh user@server 'cat remote_file')cat < <(ssh user@server 'cat remote_file')để thấy sự khác biệt.
cuonglm

9

Có thể điều này không hữu ích trong trường hợp chính xác của bạn, nhưng tôi thường chỉ sử dụng

sum -r

trên mỗi máy và so sánh thủ công. Điều đó cho phép so sánh các tập tin ngay cả khi chúng không thể truy cập thông qua kết nối ssh. Tất nhiên, tất cả những gì nó trả lời là "chúng giống hệt nhau", nhưng thường thì nó đủ cho nhu cầu của tôi. Nó cũng giúp bạn dễ dàng xác minh rằng một tệp duy nhất giống nhau trên 3 hoặc 4 máy trở lên.


2
Tôi có thể tưởng tượng rằng đối với các tệp lớn hoặc kết nối chậm, điều này có thể rất hữu ích. Nó lưu tải xuống toàn bộ tập tin khi các tập tin thực sự khác nhau. Một trình biên dịch Bash tốt hơn bản thân tôi có lẽ có thể kết hợp câu trả lời này với các câu trả lời ở trên liên quan đến một điều khiển từ xa catđể chỉ thực sự chạy catlệnh khi nó đã được xác định rằng các tệp khác nhau.
Stijn de Witt

1
Commanding info coreutils 'sum invocation'nói, inter alia: "'sum' được cung cấp để tương thích, chương trình 'cksum' (xem phần tiếp theo) thích hợp hơn trong các ứng dụng mới."
Teemu Leisti

1

Nếu bạn muốn một cách tiếp cận trực quan hơn trong phiên cuối của bạn. Bộ chỉ huy nửa đêm có tùy chọn hệ thống tệp từ xa (tùy chọn SFTP link ... trong menu) và tùy chọn so sánh tệp trực quan. Nó không được cài đặt theo mặc định trên hầu hết các hệ thống Linux nhưng có sẵn trong hầu hết các kho lưu trữ cơ sở. Các bước:

  1. Bắt đầu lệnh nửa đêm (lệnh mc:) trong thư mục chứa tệp cần so sánh
  2. Ở phía bên kia (ví dụ menu Phải ) tạo liên kết sftp đến máy chủ khác trong cùng thư mục ( sftp://<user>@<servername>/<path>).
  3. Sử dụng insphím chọn / tô sáng các tệp cần so sánh. ( tabthay đổi giữa bảng điều khiển bên trái và bên phải).
  4. Trong menu Lệnh , chọn So sánh tệp

Lưu ý: Menu lệnh nửa đêm thường có thể được truy cập bằng chuột trong phiên cuối của bạn. Nó không hoạt động F9sẽ đưa bạn vào menu.

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.